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