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配列を取得する方法はありますか?

4

1 に答える 1

0

ashこれをAlmquistシェルの下に投稿しましたがbash、Bourne-AgainSHellを使用しています。

1つの問題はパイプです。bashでパイプを実行すると、各サイドは独自のサブシェルで実行され、変数はすべてそのサブシェルに対してローカルになります。正しいメカニズムは、ループにリダイレクトすることです。

もう1つの問題は、関数がreadシェルビルトインであると呼ばれることです(これを使用します!)。f_これらの名前の衝突が発生しないように、プレフィックスなどの命名規則を使用することをお勧めします。

もう1つの問題は、2番目の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
于 2012-08-23T07:57:45.920 に答える