如何在不对其参数进行变量扩展的情况下回显脚本调用
How to echo script invocation without variable expansion of its args
在 bash 脚本中,我想回显脚本调用 而无需 扩展作为参数传递的变量。
回显脚本调用用扩展变量可以用
实现
echo "${BASH_SOURCE[0]} ${*}"
使用
回显(脚本或任何其他命令的)历史
echo "$(tail -n 1 ~/.bash_history)"
根据需要显示不带变量扩展的脚本调用,但不适用于 运行 脚本(仅适用于已完成的脚本)。
如何在 运行 脚本中回显脚本调用而不对其参数进行变量扩展?
如果您可以使用 bash -c script args
执行您的脚本,您想要的可以使用 BASH_EXECUTION_STRING
变量来实现:
$ bash -c 'echo "$BASH_EXECUTION_STRING"'
echo "$BASH_EXECUTION_STRING"
这个输出不容易理解,但是你可以看到 echo
命令在执行时打印了未展开的命令。这是因为 BASH_EXECUTION_STRING
变量的值是文字:echo "$BASH_EXECUTION_STRING"
.
因此,如果您的脚本是,例如:
#!/usr/bin/env bash
script="[=11=]"
cmd=""
shift
echo "script name: $script"
echo "command line: $cmd"
echo "parameter: "
你可以这样执行:
$ a=42 bash -c './foo.sh "$BASH_EXECUTION_STRING" "$a"'
script name: ./foo.sh
command line: ./foo.sh "$BASH_EXECUTION_STRING" "$a"
parameter: 42
在 bash 脚本中,我想回显脚本调用 而无需 扩展作为参数传递的变量。
回显脚本调用用扩展变量可以用
实现echo "${BASH_SOURCE[0]} ${*}"
使用
回显(脚本或任何其他命令的)历史echo "$(tail -n 1 ~/.bash_history)"
根据需要显示不带变量扩展的脚本调用,但不适用于 运行 脚本(仅适用于已完成的脚本)。
如何在 运行 脚本中回显脚本调用而不对其参数进行变量扩展?
如果您可以使用 bash -c script args
执行您的脚本,您想要的可以使用 BASH_EXECUTION_STRING
变量来实现:
$ bash -c 'echo "$BASH_EXECUTION_STRING"'
echo "$BASH_EXECUTION_STRING"
这个输出不容易理解,但是你可以看到 echo
命令在执行时打印了未展开的命令。这是因为 BASH_EXECUTION_STRING
变量的值是文字:echo "$BASH_EXECUTION_STRING"
.
因此,如果您的脚本是,例如:
#!/usr/bin/env bash
script="[=11=]"
cmd=""
shift
echo "script name: $script"
echo "command line: $cmd"
echo "parameter: "
你可以这样执行:
$ a=42 bash -c './foo.sh "$BASH_EXECUTION_STRING" "$a"'
script name: ./foo.sh
command line: ./foo.sh "$BASH_EXECUTION_STRING" "$a"
parameter: 42