2014-03-19 23 views
4

我使用bash創建一個輸出一組值(每行一個)的腳本,然後運行它,然後將輸出放入數組中。我想將空行保留爲空數組元素,因爲空值仍然是一個值,並且這是匹配我期待返回的值列表的唯一方法。如何在將命令讀入bash數組的同時保留空行?

所以以下的bash代碼:

> IFS=$'\n' 
> foo=($(echo 'foo bar'; echo; echo; echo baz)) 
> echo ${#foo[@]} 
2 

我期望看到4個輸出,因爲有輸出的四行。相反,只有包含某些東西的行被包含在內,所以數組中只有兩個值。

下的替代品並沒有幫助:

> foo=(`echo 'foo bar'; echo; echo; echo baz`) 
> echo ${#foo[@]} 
2 
> foo=("$(echo 'foo bar'; echo; echo; echo baz)") 
> echo ${#foo[@]} 
1 

如何才能做到這一點?

+0

是否http://stackoverflow.com/questions/ 20776911/bash-read-line-and-keep-spaces有幫助嗎? –

+0

什麼版本的'bash'? – chepner

+0

我正在研究RHEL 6,所以Bash 4.1。 – sosiouxme

回答

5

如果您正在使用bash 4或更高版本,

readarray -t foo < <(echo 'foo bar'; echo; echo; echo baz) 

在早期版本中,我推薦一個更零敲碎打的做法:

foo=() 
while IFS= read -r; do 
    foo+=("$REPLY") 
done < <(echo 'foo bar'; echo; echo; echo baz) 
+1

+1,但OP可能想要使用'readarray -t'。 –

+0

如果我每次都忘記在這些答案中使用'-t',則表示鎳...... – chepner

+0

如果* I *在每次忘記使用'read -r' *咳嗽*提示*咳嗽* ...-) –

相關問題