【发布时间】:2022-01-19 17:31:18
【问题描述】:
我想在 heredoc 中传递一个字符串,其中包含一个变量和多个“$”字符。 没有heredoc的命令是:
FOO='BAR'
echo ${FOO}: '$NOT_A_VARIABLE'
FOO 变量被正确替换,'$NOT_A_VARIABLE' 字符串避免了替换,因为它是单引号。命令按预期返回:
BAR: $NOT_A_VARIABLE
现在,如果我在 heredoc 中做同样的事情:
sh << EOF
echo ${FOO}: '$NOT_A_VARIABLE'
EOF
输出不是我想要的:
BAR:
似乎'$NOT_A_VARIABLE' 被替换了,即使它被单引号包围。
我知道可以通过使用反斜杠转义 $ 来避免这种情况:\$ 但这个解决方案很烦人,因为字符串中可能随机分布有多个 $ 字符。
我想知道是否可以巧妙地使用引号(单引号/双引号)或其他可能解决此问题的解决方案。
【问题讨论】:
-
bash不解析heredoc,因此它可以展开所有变量,也可以不展开。
标签: string bash shell variables heredoc