我正在编写一个shell,并且对POSIX shell规范感到有些困惑。比如,假设我有以下命令:
echo "`echo "a\\
b"`"
应该将Shell输出
ab
或者
a\
b
换句话说,在从命令替换文本中删除转义字符后,行继续符是否再次被删除? POSIX规范似乎指定不会再次发生删除行继续符的情况,但我测试过的所有shell(bash、dash和busybox的ash)都会再次执行行继续符的删除,导致测试脚本输出ab
。
脚本说明:
脚本中在命令替换内部的部分未经转义,产生以下结果:
echo "a\
b"
现在,如果再运行连续行删除操作,它将删除反斜杠-换行符对,生成命令
echo "ab"
在命令替换内部,否则反斜杠-换行符对仍然存在于 a
和 b
之间。
bash --posix
命令以 POSIX 模式运行 Bash,并查看该命令的处理方式。 - Ian Kenney$( )
是完全有效的。只有在 pre-POSIX Bourne 中它不可行 - 并且在$()
中反斜杠处理要简单得多。也就是说,如果您只有关于“backticks”的问题,我建议修改标题来说明。 - Charles Duffy