根據手冊「讀-N」描述:閱讀-N和IFS
-N nchars只是恰好讀NCHARS字符後返回,除非EOF遇到或讀超時,忽略任何分隔符
然而,在回答下面的命令:
$ echo 'a b' | while read -N1 c; do echo ">>>$c<<<"; done
>>>a<<<
>>><<<
>>>b<<<
>>><<<
兩個,空間和換行已被翻譯成空字符串,而在命令:
$ echo 'a b' | while IFS= read -N1 c; do echo ">>>$c<<<"; done
>>>a<<<
>>> <<<
>>>b<<<
>>>
<<<
空間和新行已被正確存儲在變量。
所以,似乎分隔符仍具有「讀取」或「而」命令,我不明白一些處理。
我們可以比較這些結果與用「讀-n」的那些,描述爲手動:
-n nchars閱讀NCHARS字符,而不是等待一個新行後返回,但如果少孝敬分隔符比NCHARS字符分隔符
$ echo 'a b' | while read -n1 c; do echo ">>>$c<<<"; done
>>>a<<<
>>><<<
>>>b<<<
>>><<<
$ echo 'a b' | while IFS= read -n1 c; do echo ">>>$c<<<"; done
>>>a<<<
>>> <<<
>>>b<<<
>>><<<
優秀的解釋,但仍然是一個開放點,案例(4)中的換行符,即使不屬於IFS,也以與空間不同的方式處理。也就是說,我認爲(3)我們不能說「0x0a,空格字符返回空字符串,因爲這兩個字符都在默認的IFS中」。 –
@pasabaporaqui - 你說得很對:-n開關的語義意味着IFO中的'0x0a'是多餘的。我已經改變了討論,以便明確這個冗餘。 –
完美,只是在案例(2)中的編輯評論:「IFS未定」應該是「IFS空」。 –