考虑以下Shell代码:
unset foo
echo "${foo-'}'}"
结果取决于使用的shell:
- bash:
'}'
- ksh:
''}
- tcsh:
缺少 }
- zsh:
''}
哪些 shell 行为符合 POSIX 标准?
一个符合POSIX标准的shell应该输出:
''}
${foo-'}
。这意味着:如果foo未设置,则替换为单引号。这是输出中的第一个单引号。在闭合大括号之后,shell找到第二个单引号,后跟一个闭合大括号。由于这也仍然在最外层的引号内,因此这两个字符也被打印出来。如果您改为写echo ${foo-'}'}
,则会打印一个单个大括号。 - user1934428