ループのショートカット

ループのショートカット

ショートカット:、ステートメントの(expr1 && expr2)代わりに。if ... fiループを介して、...を生成したい場合はできますかexpr1expr2

おもちゃの例は次のとおりです。

$ 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この文をどのように変更できますか?内部に交換すると、ターミナルウィンドウが閉じます。truefalseecho 1exit

ベストアンサー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上記のように保存し、ループの外側でその値をチェックすることです。

おすすめ記事