命令替换中的Heredoc:引号或括号不平衡时出错(bash和zsh)

时间:2014-09-17 13:15:07

标签: bash shell zsh

考虑以下用于打印单引号的混淆脚本,该脚本适用于ksh

#!/bin/ksh
echo "$(cat <<EOF
'
EOF
)"

输出:

'

但是,当我在OS X上使用bash 3.2.51(1)运行相同的脚本时,

#!/bin/bash
echo "$(cat <<EOF
'
EOF
)"

bash报告以下错误:

./heredoc-within-cmdsubst: line 3: unexpected EOF while looking for matching `''
./heredoc-within-cmdsubst: line 6: syntax error: unexpected end of file

使用zsh 5.0.2

运行
#!/bin/zsh
echo "$(cat <<EOF
'
EOF
)"

zsh报告以下错误:

./heredoc-within-cmdsubst:6: unmatched "

当单引号被双引号或括号替换时,会发生类似的错误。如果我使用匹配的单引号/双引号/括号来平衡单引号/双引号/括号,那么脚本可以使用bash和zsh运行良好。

这个问题只是(bash和zsh的相关版本)中的错误,还是违反了任何语法规则?

1 个答案:

答案 0 :(得分:1)

除非开发人员另有说法,否则我会认为这是一个解析错误。代码在dash中按原样运行,this zsh question中存在类似的未闭合引用错误。

更新:这实际上已在bash 4.1中修复;我只检查了zsh 5.0.2(最新版本是5.0.6)。