考虑以下用于打印单引号的混淆脚本,该脚本适用于ksh
:
#!/bin/ksh
echo "$(cat <<EOF
'
EOF
)"
Output:
'
但是,当我运行相同的脚本时bash 3.2.51(1)
在 OS X 上,
#!/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(相关版本)中的一个错误,还是这里违反了任何语法规则?
我会认为这是一个解析错误,直到/除非开发人员另有说明。该代码适用于dash
按原样,并且存在类似的未闭合引号错误this zsh问题 https://stackoverflow.com/q/25778521/1126841.
更新:这实际上已修复bash
4.1;我只签到过zsh
5.0.2(最新版本为5.0.6)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)