gpt4 book ai didi

shell - bash echo 带有转义反引号和 $

转载 作者:行者123 更新时间:2023-12-02 20:09:28 28 4
gpt4 key购买 nike

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 是:Build `date`

我知道我可以转义 `$ 字符,但在我的应用程序中,它们来自上游服务并作为参数传递给 shell 脚本。即使上游服务也无法逃脱它们,因为稍后在脚本中我实际上需要执行这些命令。

理想的方法是告诉 echo 仅扩展变量 $COMMAND1,但不评估其中的任何内容。或者使用 sed 来转义所有出现的 `$,但我无法实现.

最佳答案

表达式在赋值时进行计算。

COMMAND1="Build `date`"

`...` 是一个命令替换,已被弃用,取而代之的是 $( ... ) 样式。 " 双引号用于允许文本展开。因此首先将此命令展开为:

COMMAND1='Build Wed Dec 26 21:09:43 UTC 2018'

然后分配发生。您稍后无法检索使用什么命令来声明该变量。该信息丢失了。如果您有一些上游 - 它需要将此信息传递给您。

如果您希望 COMMAND1 包含字符串(字面意思)

Build `date`

您可以使用单引号:

COMMAND1='Build `date`'

您稍后可以使用eval或类似的组合来扩展变量,但我建议只执行一个函数

COMMAND1() {
Build $(date)
}

echo "COMMAND1 is declared as:"
declare -f COMMAND1
echo "COMMAND1 execution returns: $(COMMAND1)"

有用的链接:

关于shell - bash echo 带有转义反引号和 $,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53937332/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com