【发布时间】:2017-10-04 13:54:54
【问题描述】:
我正在编写一个 shell,并且从 bash、dash 和 busybox 的 ash 中得到了意想不到的解析:
echo "`echo a #`"
打印a,但是
echo "$(echo a #)"
给出一个关于缺少结束 ) 的错误。
如何根据 POSIX 解析命令替换中的注释? 所以,对于命令:
echo "`echo a #`"
和
echo "$(echo a #)"
shell 会将注释解析为延伸到命令替换的末尾还是行尾? 此外,如果命令替换不在双引号中,shell 会以不同的方式解析它吗? 最后,是否有任何其他结构(在 POSIX 或 bash 中)可以在这样的引号内开始注释?
【问题讨论】:
-
ksh和zsh表现出相同的行为。我没有解释,但这里是 POSIX 规范相关部分的链接:pubs.opengroup.org/onlinepubs/9699919799/xrat/… -
引用
#以避免它被视为注释字符的任何可能性将避免该问题。 -
@chepner 除非目的是在命令替换中添加注释以用于文档目的 - 在这种情况下,这里没有令人满意的答案。
-
@TamaMcGlinn 命令替换可以分成多行。在
#和)之间添加一个换行符。
标签: bash sh posix language-lawyer busybox