Heredoc:传递带有变量和多个“$”字符的字符串
Heredoc: Passing a string with a variable and multiple "$" characters
我想在包含变量和多个“$”字符的 heredoc 中传递一个字符串。
没有 heredoc 的命令是:
FOO='BAR'
echo ${FOO}: '$NOT_A_VARIABLE'
FOO
变量被正确替换,'$NOT_A_VARIABLE'
字符串避免替换,因为它是单引号。命令 returns 符合预期:
BAR: $NOT_A_VARIABLE
现在如果我在 heredoc 中做同样的事情:
sh << EOF
echo ${FOO}: '$NOT_A_VARIABLE'
EOF
输出不是我想要的:
BAR:
似乎 '$NOT_A_VARIABLE'
被替换了,即使它被单引号括起来。
我知道这可以通过用反斜杠转义 $
来避免:$
但是这个解决方案很烦人,因为可能有多个 $
字符随机分布在字符串中.
我想知道是否可以巧妙地使用引号 (single/double) 或其他可能解决此问题的解决方案。
您此处文档的内容被视为双引号字符串,就好像您已经编写了
echo "$FOO: '$NOT_A_VARIABLE'" | sh
如果你想抑制所有参数扩展在here文档中,你可以引用分隔符:
sh << 'EOF'
echo ${FOO}: '$NOT_A_VARIABLE'
EOF
哪个会过去
echo ${FOO}: '$NOT_A_VARIABLE'
作为 sh
.
的输入
如果您只想抑制 特定的 扩展,请像在双引号字符串中一样转义 $
。
# echo "$FOO: $NOT_A_VARIABLE" | sh
sh << EOF
echo ${FOO}: $NOT_A_VARIABLE
EOF
我想在包含变量和多个“$”字符的 heredoc 中传递一个字符串。 没有 heredoc 的命令是:
FOO='BAR'
echo ${FOO}: '$NOT_A_VARIABLE'
FOO
变量被正确替换,'$NOT_A_VARIABLE'
字符串避免替换,因为它是单引号。命令 returns 符合预期:
BAR: $NOT_A_VARIABLE
现在如果我在 heredoc 中做同样的事情:
sh << EOF
echo ${FOO}: '$NOT_A_VARIABLE'
EOF
输出不是我想要的:
BAR:
似乎 '$NOT_A_VARIABLE'
被替换了,即使它被单引号括起来。
我知道这可以通过用反斜杠转义 $
来避免:$
但是这个解决方案很烦人,因为可能有多个 $
字符随机分布在字符串中.
我想知道是否可以巧妙地使用引号 (single/double) 或其他可能解决此问题的解决方案。
您此处文档的内容被视为双引号字符串,就好像您已经编写了
echo "$FOO: '$NOT_A_VARIABLE'" | sh
如果你想抑制所有参数扩展在here文档中,你可以引用分隔符:
sh << 'EOF'
echo ${FOO}: '$NOT_A_VARIABLE'
EOF
哪个会过去
echo ${FOO}: '$NOT_A_VARIABLE'
作为 sh
.
如果您只想抑制 特定的 扩展,请像在双引号字符串中一样转义 $
。
# echo "$FOO: $NOT_A_VARIABLE" | sh
sh << EOF
echo ${FOO}: $NOT_A_VARIABLE
EOF