输入重定向中的参数替换

时间:2014-01-11 16:33:25

标签: shell redirect input parameters substitution

我是shell脚本的新手,我遇到以下问题:

如果我进入shell

cat << EOF
'"$10^2$"'
EOF

我期望(并希望)得到类似

的东西
"$10^2$"

但实际上它使用了参数替换,我得到了

'"0^2"'

为什么参数替换(我使用单引号!?)?我怎样才能获得所需的输出?

1 个答案:

答案 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'时。