Bash
Bash Read:讀取逗號分隔列表,最後一個元素失去
下面命令的輸出對我來說很奇怪。為什麼它不給我回元素 5?
$ echo '0,1,2,3,4,5' | while read -d, i; do echo $i; done 0 1 2 3 4
我希望'5’也會被退回。執行
GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)
。添加逗號有效,但我的輸入數據沒有逗號。我錯過了什麼嗎?
使用
read
,-d
用於終止輸入行(即不分隔輸入行)。您的最後一個“行”不包含終止符,因此read
在 EOF 上返回 false 並且循環退出(即使讀取了最終值)。echo '0,1,2,3,4,5' | { while read -d, i; do echo "$i"; done; echo "last value=$i"; }
(即使使用
-d
,read
也使用$IFS
, 吸收空格,包括\n
使用其他方法出現的最終值的尾隨,例如readarray
)Bash FAQ 討論了這一點,以及如何處理各種類似的情況: