【发布时间】:2019-05-25 00:40:01
【问题描述】:
test.sh
COMMAND1="Build `date`"
COMMAND2="echo $PATH"
echo "Command1 is: $COMMAND1"
echo "Command2 is: $COMMAND2"
输出
Command1 is: Build Wed Dec 26 21:09:43 UTC 2018
Command2 is: echo /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
在上面的 shell 脚本中,如何在不评估表达式的情况下回显,即我想要 Command1 is: Build `date`
我知道我可以转义 ` 和 $ 字符,但在我的应用程序中它们来自上游服务并作为参数传递给 shell 脚本。甚至上游服务也无法逃脱它们,因为稍后在脚本中我实际上需要执行这些命令。
理想的方法是告诉 echo 仅扩展变量 $COMMAND1,但不要评估其中的任何内容。或者使用 sed 来转义所有出现的` 和$,但我都没有实现。
【问题讨论】:
-
请注意,将命令存储在字符串变量中被认为是不好的做法——它天生就容易出错。请参阅BashFAQ #50,了解有关它如何以及为何出现问题以及可用替代方案的讨论。
-
@CharlesDuffy 感谢您的链接。
set -x选项很有趣。我会试试的。