2014-03-27 54 views
1

我嘗試下面的代碼來將命令輸出存儲在數組中 但在「while循環」之後不能打印數組元素 我的意思是在最後我的代碼行 在我的代碼中有沒有問題?設置在bash'while read'循環中的變量在它之後未被設置

#! /bin/bash 

ls -a | while read line 

do 
    array[$i]="$line " 

     echo ${array[ $i ]} 
     ((i++)) 
done 

echo ${array[@]} <------------ 
+1

你是什麼意思_數組元素不能在「while循環」_之後被打印?你有錯誤?沒有錯誤,但沒有打印? –

回答

2

的問題是,你在一個殼中添加元素。爲了詳細闡述:

command1 | command2 

導致command2到在子shell,它是一個獨立的執行環境中執行。這意味着在command2中設置的變量不可用於當前的外殼,其執行環境不受影響。你也可以使用進程替換來實現相同的:

while read line; do 
... 
done < <(ls -l) 

請注意,parsing ls不推薦;請嘗試使用find

+0

非常感謝,我爲我工作。其實,我不知道它會單獨工作 – user3442927

+0

很好的答案;爲了完整起見:'command1'也是在子shell中執行的。 – mklement0