Closed1
【bash】変数の中身が更新されない
困った
whileの中で変数の更新をしたが更新されなかった
#!/bin/bash
found=0
echo "1 2 3 4" | while read i
do
if [[ $i -eq 1 ]]
found=1
fi
done
echo "$found" # 0が出力される
原因
まったく同じお悩みをみつけた
while以降が子プロセスで実行されているからです。
子プロセスで変数を変更しても親プロセスは関知しません。
※forループの書き方によってはループ内の処理が別プロセスとして実行される場合があります。
ループの内外でプロセスIDを出力(※)してみると異なるPIDになっていることがわかります。
解決
for文に書き直して解決
#!/bin/bash
found=0
for i in 1 2 3 4
do
if [[ $i -eq 1 ]]
found=1
fi
done
echo "$found" # 1が出力される
このスクラップは4日前にクローズされました