ショートカット:、ステートメントの(expr1 && expr2)
代わりに。if ... fi
ループを介して、...を生成したい場合はできますかexpr1
?expr2
おもちゃの例は次のとおりです。
$ for cond in {0,0,0}; do if [[ $cond = 0 ]]; then echo 0; else echo 1; break; fi; done && echo "true" || echo "false"
0
0
0
true
$ for cond in {0,1,0}; do if [[ $cond = 0 ]]; then echo 0; else echo 1; break; fi; done && echo "true" || echo "false"
0
1
true
最初の文だけを返し、2番目の文は返すようにif...fi
この文をどのように変更できますか?内部に交換すると、ターミナルウィンドウが閉じます。true
false
echo 1
exit
ベストアンサー1
ループの終了状態は、ループ内で実行された最後のコマンドの終了状態(echo
または)break
であり、両方の終了状態は通常ゼロです。したがって、条件を保存して状態を確認する必要があります。次の機能を使用することをお勧めします。
loopcheck() {
for cond in {0,1,0}; do
if [[ $cond = 0 ]]; then
echo 0;
else
ret=$?; # preserve exit status of test
echo 1;
return $ret; # pass it on
fi;
done
}
loopcheck && echo "true" || echo "false"
別のオプションは、$ret
上記のように保存し、ループの外側でその値をチェックすることです。