Shell 输入重定向中的参数替换

Shell 输入重定向中的参数替换,shell,redirect,input,parameters,substitution,Shell,Redirect,Input,Parameters,Substitution,我是shell脚本的新手,我有以下问题: 如果我进入壳里 cat << EOF '"$10^2$"' EOF 但实际上它使用了参数替换,我得到了 '"0^2"' 为什么要用参数替换(我用单引号!?)?如何获得所需的输出?避开美元符号: cat << EOF '"\$10^2$"' EOF 否则,$1将由shell展开,并且仅将输出显示为空字符串,您将获得输出为“'0^2$” 更新:否则使用此形式的heredoc以避免变量扩展: cat <<'EOF' '

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

如果我进入壳里

cat << EOF
'"$10^2$"'
EOF
但实际上它使用了参数替换,我得到了

'"0^2"'

为什么要用参数替换(我用单引号!?)?如何获得所需的输出?

避开美元符号:

cat << EOF
'"\$10^2$"'
EOF
否则,
$1
将由shell展开,并且仅将输出显示为空字符串,您将获得输出为
“'0^2$”

更新:否则使用此形式的heredoc以避免变量扩展:

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

cat感谢您的解决方案。尽管我把表达式放在单引号中,为什么它会被扩展?好吧,听起来不错:)所以尽管我把表达式放在单引号中,bash解释字符串?我原以为当我把它放在双引号中时它会被解释,而当我把它放在单引号中时它不会被解释……是的,区别是因为我使用了
'EOF'
,我的意思是在这里的文档中也没有引用'EOF',我原以为单引号中的部分不会被评估(因为它们在单引号中),但很明显,如果使用
cat,它们会得到评估
"$10^2$"
cat <<'EOF'
'"$10^2$"'
EOF
'"$10^2$"'
<<[-]word
    here-document
delimiter