2011-07-06 127 views
1

我試圖使用bash內建read從文件或從標準輸入讀取數據(無關緊要的目的是什麼的討論,只要我可以管它),並將它們存儲在一個數組中。這有時會起作用,有時不起作用,我不知道爲什麼。使用讀取從文件或標準輸入輸入不存儲讀取值

下面是測試例:

values=(1 2 3) 
echo "4 5 6" | read -a values; echo "${values[*]}" 

輸出應爲 「4 5 6」,而是它的 「1 2 3」。另一方面,像這樣運行時:

values=(1 2 3) 
echo "4 5 6" | (read -a values; echo "${values[*]}") 

我得到正確的輸出。

任何想法?

回答

1

這裏是我的解決方案(搞清楚這個問題是愚蠢的後 - 感謝伊格納西奧):

IFS="$(printf "\a")" read -ra values < <(some-command | tr '\n' '\a') 

問題是bash的進程替換(<())剝離出來的新線在輸出(關於參數擴展?我不確定),所以我不能使用"\n"作爲記錄分隔符。因此,我將命令輸出中的換行符轉換爲「可聽鍾」字符(我不希望在其中找到任何輸出),並將其用作記錄分隔符。最後,我在values元素中獲得1行。