我是shell脚本的新手,我遇到以下问题:
如果我进入shell
cat << EOF
'"$10^2$"'
EOF
我期望(并希望)得到类似
的东西"$10^2$"
但实际上它使用了参数替换,我得到了
'"0^2"'
为什么参数替换(我使用单引号!?)?我怎样才能获得所需的输出?
答案 0 :(得分:0)
逃离美元符号:
cat << EOF
'"\$10^2$"'
EOF
<强>输出:强>
"$10^2$"
否则$1
正在被shell扩展并仅显示输出为空字符串,并且输出为'"0^2$"'
UPDATE:否则使用这种形式的heredoc来避免变量扩展:
cat <<'EOF'
'"$10^2$"'
EOF
'"$10^2$"'
说明:根据man bash:
<<[-]word
here-document
delimiter
不对字执行参数扩展,命令替换,算术扩展或路径名扩展。如果引用单词中的任何字符,则
分隔符是单词上的引号删除的结果,并且不会展开here-document中的行。 If word is unquoted, all lines of the here-document
are subjected to parameter expansion, command substitution, and arithmetic expansion.
在后一种情况下,字符序列\将被忽略,并且
\必须用于引用字符\,$和`。
请参阅上面的粗体文字,了解为什么变量在您的示例中展开,而不是在我使用引用的'EOF'
时。