似乎 bash 和 dash 从我的脚本中过滤掉任何 ASCII NUL。
$ printf 'test="\000a" ; echo ${#test}' | sh
1
$ printf 'test="\001a" ; echo ${#test}' | sh
2
$ printf 'ec\000ho test' | sh
test
$ # (Same for bash)
虽然我同意使用 NUL 是一个坏主意(例如,传递给程序的参数适用于 NUL 终止的字符串),但我看不出POSIX 标准在哪里认可这种行为。
当这种行为决定文件的语法正确性时,情况会变得更糟。
$ printf 'echo "\\\000"' | sh
sh: Syntax error: Unterminated quoted string
$ printf 'echo "\\\000"' | bash
bash: line 1: unexpected EOF while looking for matching `"'
bash: line 2: syntax error: unexpected end of file
$ printf 'echo "\\\134"' | sh
\
我错过了哪些重要部分,或者 NUL 删除只是关于如何应对未指定行为的决定?