Bash

Bash Read:讀取逗號分隔列表,最後一個元素失去

  • May 17, 2019

下面命令的輸出對我來說很奇怪。為什麼它不給我回元素 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 討論了這一點,以及如何處理各種類似的情況:

引用自:https://unix.stackexchange.com/questions/519471