0

这真的让我很困惑。当我尝试使用此处文档进行多行注释时,以下代码给了我错误“expr:语法错误”

<<EOF
echo "Sum is: `expr $1 + $2`"
EOF

即使我使用“#”明确注释掉包含 expr 的行,错误消息仍然存在

<<EOF
#echo "Sum is: `expr $1 + $2`"
EOF

我观察到只有当我将第二个操作数作为变量提供给 expr 时才会发生这种情况。如果我将其硬编码为数值,则错误消息将消失,即

<<EOF
echo "Sum is: `expr $1 + 2`"   # expr's second argument numeric value is hard coded, no error now
EOF

有人可以启发我吗?

4

2 回答 2

1

这里文档的处理方式与 shell 中其他文本的处理方式相同。也就是说,变量被展开,反引号中的命令被执行。

您可以通过在EOF. 在您的情况下,您可能需要单引号:

<<'EOF'
echo "Sum is: `expr $1 + $2`"
EOF

这将阻止 shell 对您的文本做任何“聪明”的事情。

于 2013-11-11T12:10:11.870 回答
0

这是您的代码中的几个错误。这里的文档是一种重定向类型,指示 shell 从当前源读取输入

您不应该在 here 文档中使用 echo。cat here 文档或使用here 字符串并回显它。

此示例将有效:

cat <<EOF                                                                                                                                  
Sum is: `expr $1 + $2`                                                                                                                     
EOF 
于 2013-11-11T12:16:39.323 回答