私のスクリプトからASCII NULを除外するのは、bashとdashのようです。
$ 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 の削除は、不特定の動作に対処する方法についての決定にすぎませんか?