2012-10-26 40 views
1

可能重複:
Bash: can’t build array in right side of pipe爲什麼我的數組在退出循環後不見了?

我需要創建從一個文件的數組。我必須計算一個存儲數據的索引。當我在閱讀循環之外時,我的數組似乎消失了。爲什麼???

下面的腳本說明了這個問題。

#!/bin/bash 

echo -e "15\n21\n33" | while read i ; do 
    ar[$i]="set" 
    echo ${!ar[@]} 
    echo ${ar[@]} 
    done 

echo 
echo outside loop: 
echo ${!ar[@]} 
echo ${ar[@]} 

正如您在輸出中看到的那樣,打印數組索引和內容不再在循環外工作。

15 
set 
15 21 
set set 
15 21 33 
set set set 

outside loop: 
+3

請參閱http: //stackoverflow.com/q/11656013/1030675 – choroba

+1

http://mywiki.wooledge.org/BashFAQ/024 – ormaaj

回答

3

@ormaaj在他的評論中有答案:不要把循環放在管道中。我認爲這些數字是不是恆定的,所以從工藝替代,而不是重定向:

while read i ; do 
    ar[$i]="set" 
    echo ${!ar[@]} 
    echo ${ar[@]} 
done < <(process to generate indices) 

另一種選擇是把最後的echo語句在同一子shell的循環:

process to generate indices | { 
    while read i ; do 
     ar[$i]="set" 
     echo ${!ar[@]} 
     echo ${ar[@]} 
    done 

    echo 
    echo outside loop: 
    echo ${!ar[@]} 
    echo ${ar[@]} 
} 
相關問題