这里 - 文档注释“expr”内置的Unix命令会产生奇怪的行为

时间:2013-11-11 12:01:31

标签: shell

这真让我困惑。当我尝试使用此处文档进行多行注释时,以下代码给出了错误'expr:syntax error'

<<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

有人可以启发我吗?

2 个答案:

答案 0 :(得分:1)

此处处理文档的方式与在shell中处理其他文本的方式相同。也就是说,扩展变量,并执行反引号中的命令。

您可以通过在EOF周围添加不​​同类型的引号来控制此行为。在您的情况下,您可能需要单引号:

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

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

答案 1 :(得分:0)

这是您代码中的一些错误。这里的文件是type of redirection instructs the shell to read input from the current source

您不应在此处的文档中使用回显。 cat here here或使用here string并回复它。

此示例有效:

cat <<EOF                                                                                                                                  
Sum is: `expr $1 + $2`                                                                                                                     
EOF