1
我是一个新手,shell脚本,我有以下问题:参数替换
如果我进入外壳
cat << EOF
'"$10^2$"'
EOF
我希望(和希望)得到的东西像
"$10^2$"
,但实际上它使用的参数替换和我
'"0^2"'
为什么它参数替换(我用单引号!?)?我怎样才能得到理想的输出?
我是一个新手,shell脚本,我有以下问题:参数替换
如果我进入外壳
cat << EOF
'"$10^2$"'
EOF
我希望(和希望)得到的东西像
"$10^2$"
,但实际上它使用的参数替换和我
'"0^2"'
为什么它参数替换(我用单引号!?)?我怎样才能得到理想的输出?
逃离美元符号:
cat << EOF
'"\$10^2$"'
EOF
OUTPUT:
"$10^2$"
否则$1
是由外壳扩展,仅仅只显示为空字符串输出和所得到的输出为'"0^2$"'
更新:否则你SE这种形式的定界符,以避免变量扩展:
cat <<'EOF'
'"$10^2$"'
EOF
'"$10^2$"'
说明:作为每人的bash:
<<[-]word
here-document
delimiter
否参数扩展,命令替换,算术扩展,或在字进行路径扩展。如果引用了单词中的任何字符,则 分隔符是单词上的引号删除的结果,并且此文档中的行不会被展开。 If word is unquoted, all lines of the here-document are subjected to parameter expansion, command substitution, and arithmetic expansion.
在后一种情况下,字符序列\将被忽略,并且必须使用 \以引用字符\,$和`。
请参阅上面的粗体文本,以解释为什么变量在您的示例中得到扩展,但不是当我使用引用'EOF'
时。
谢谢你的解决方案。为什么扩展,尽管我把表达式放在单引号中? – user3185454
现在查看更新的答案。 – anubhava
好吧,这听起来不错:)所以,尽管我把表达式放在** single **引号中,bash解释了字符串?我原本以为它会被解释,当我把它放在双引号中,并且在我把它放在单引号中时不会被解释... – user3185454