这真让我困惑。当我尝试使用此处文档进行多行注释时,以下代码给出了错误'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
有人可以启发我吗?
答案 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