【Linux】変数の中身が更新されない?
【問題】
ループ処理を通して、変数の中身を更新するようにコーディングしたが、実行すると予想に反して中身が更新されていない。
#!/bin/bash
sum=1
echo "2
3
4" | while read i
do
echo "i=$i"
((sum+=i))
echo "sum=$sum"
done
echo "result=$sum"
(出力結果)
i=2
sum=3
i=3
sum=6
i=4
sum=10
result=1
【原因】
while以降が子プロセスで実行されているから。
※パイプ(|)から後ろで実行している処理は子プロセスで行われ、子プロセスで変数を変更しても親プロセスは関知しない。
【解決策】
for文で書き直してみる。
#!/bin/bash
sum=1
for i in 2 3 4
do
echo "i=$i"
((sum+=i))
echo "sum=$sum"
done
echo "result=$sum"
(出力結果)
i=2
sum=3
i=3
sum=6
i=4
sum=10
result=10
【参考資料】
シェルスクリプトで while ループ内の変更が反映されない
この記事が気に入ったらサポートをしてみませんか?