Почему из моего скрипта удалены все NUL?

Кажется, 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 -— это всего лишь решение о том, как справиться с неуказанным поведением?

11
задан Jo So 9 November 2015 в 21:47
поделиться