2012-07-31 56 views
0
#!/bin/bash 

read() 
{ 
    count=0 
    cat localfile | 
    while read line 
    do 
     FILE[$((count += 1))]="$line" 
    done 
} 

read 
for((i=0;i<${#FILE[@]});i++) 
do 
    echo ${FILE[i]} 
done 

回聲的結果是完全空白的。有沒有辦法獲得FILE數組?如何從其他while循環獲取變量?

回答

0

您已將此貼在ash的Almquist外殼上,但您使用的是Bourne-Again SHell的bash

一個問題是管道。當你在bash中運行一個管道時,每一邊運行在它自己的子shell中,並且任何變量都是本地的。正確的機制是重定向到循環中。

另一個問題是你的函數被稱爲read,這是一個shell內置的(你使用它!)。一個好主意是使用一個命名約定,如前綴f_,所以你不會得到這些名稱衝突。

您遇到的另一個問題是您的第二個for循環的語法在多個方面是錯誤的。這裏是一個更正的版本:

#!/bin/bash 

f_read() 
{ 
    count=0 
    while read line 
    do 
     FILE[$((count += 1))]="$line" 
    done < localfile 
} 

f_read 
for ((i=0;i<${#FILE[@]};i++)) 
do 
    echo ${FILE[i]} 
done