我正在编写一个shell,但是无论是bash、dash还是busybox的ash都出现了意外的解析问题:
echo "`echo a #`"
输出a
,但是
echo "$(echo a #)"
如果缺少一个闭合的)
,会产生有关缺失的错误。
根据POSIX规范,命令替换中的注释如何解析?因此,对于以下命令:
echo "`echo a #`"
并且
echo "$(echo a #)"
命令行解释器会将注释解析为扩展到命令替换的末尾,还是扩展到行末? 如果命令替换不在双引号内,命令行解释器是否会以不同方式解析它? 最后,是否有其他结构(在 POSIX 或 bash 中)可以在引号内开始注释?
ksh
和zsh
表现出相同的行为。我没有解释,但这是 POSIX 规范相关部分的链接:http://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xcu_chap02.html#tag_23_02_06_03 - mklement0#
可以避免它被视为注释字符的可能性,从而避免问题。 - chepner#
和)
之间加入新行即可。 - chepner