2016-05-28 82 views
2

我想用while read這個數組,但整個數組一次輸出。while read bash array(not into)

#!/bin/bash 

declare -a arr=('1:one' '2:two' '3:three'); 

while read -e it ; do 
    echo $it 
done <<< ${arr[@]} 

它應該分別輸出每個值(但沒有),所以也許在閱讀不是熱門票嗎?

+1

'貓<<< $ {ARR [@]}'將所有元件在同一直線上。 –

+0

@couling:我也嘗試過'<和'<<',但沒有真正明白。 –

回答

7

對於這種情況,很容易使用for循環:

$ declare -a arr=('1:one' '2:two' '3:three') 
$ for it in "${arr[@]}"; do echo $it; done 
1:one 
2:two 
3:three 

while read方法是非常有用的(a)如果您想從文件中讀取數據,以及(b)當你想以nul或換行符分隔字符串讀取。但是,對於您的情況,您已經擁有bash變量中的數據,並且for循環更簡單。

+0

while循環不可能讀取數組,或者可以向數組添加換行符,以便讀取文件?只是好奇,真的......謝謝! –

+0

@CocoaPuffs - 你可能需要第二個while循環來回顯(寫出)數據,所以你可以閱讀它 - 所以不是一個很好的解決方案來嘗試使用while循環 – Soren

+0

@CocoaPuffs數組是_already_一個bash變量。使用'while read'意味着將它從bash變量中作爲一個字符串讀取,然後'read'將會重新處理成新的bash變量。我敢肯定,有些情況下,這很有用,但他們會非常少見。 – John1024

1

可能通過while循環

#!/bin/bash 

declare -a arr=('1:one' '2:two' '3:three'); 
len=${#arr[@]} 
i=0 
while [ $i -lt $len ]; do 
    echo "${arr[$i]}" 
    let i++ 
done