它看起來像bash,也破折號,從我的腳本中過濾掉任何ASCII NUL。爲什麼所有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是一個壞的壞主意(以傳遞給節目例如參數可與NULL結尾的字符串),我沒有看到這種現象是the POSIX standard制裁。
當這種行爲決定文件的語法正確性時,情況變得更糟。
$ 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
\
我錯過了什麼重要組成部分,或者就是空去除只能在如何與未指定的行爲應付的決定?
我熟悉的所有sh實現都使用C字符串,它們是NUL終止的,它們的性質不能保存NUL值。 – 2012-08-08 00:18:17
zsh很好地處理了所有這些測試用例。 – 2012-08-08 04:50:49
如果@ CharlesDuffy的回答不足,我也會試着詢問Unix和Linux。 – twmb 2012-08-08 07:44:45