for ループで AND (&&) を置き換えるにはどうすればいいですか?

for ループで AND (&&) を置き換えるにはどうすればいいですか?

同等のものを見つけたい

cmd 1 && cmd 2 && ... && cmd 20

forしかし、ループ内で表現されるコマンドは

for i in {1..20}
do
   cmd $i
done

最初の式と同等のものを見つけるために、2 番目の式で何を変更すればよいと思いますか?

答え1

元のシーケンスと同等のものは次のようになります。

for i in {1..20}
do
   cmd $i || break
done

Amit の回答との違いは、スクリプトが終了しないこと、つまり、シーケンス/ループに続く可能性のあるコマンドを実行することです。私の提案では、ループ全体の戻りステータスは常に true になることに注意してください。これは、関連する場合は修正される可能性があります。

答え2

1 行だけの簡単なソリューションが必要な場合は、コマンドを作成して bash に送信できます。

echo "cmd "{1..20}" &&" : | bash

答え3

どちらかが失敗した場合はループから抜け出すことができます

for i in {1..55}; do
    if ! cmd $i; then
        exit 1
    fi
done

答え4

これは、ターミナルを使用せずにタスクを実行する方法です&&

 for i in google.com yahoo.com;do ping -c1 $i;echo $i;done

このコマンドをスクリプトに記述する必要があるのと同様です

 for i in google.com yahoo.com
    do echo $i;ping -c1 $i;
  done

どちらも同じ出力を出します

google.com PING google.com (172.217.26.174) 56(84) バイトのデータ。google.com (172.217.26.174) からの 64 バイト: icmp_seq=1 ttl=56 time=259 ms

--- google.com ping 統計 --- 送信パケット 1 個、受信パケット 1 個、パケット損失 0%、時間 0 ミリ秒 rtt 最小/平均/最大/平均偏差 = 259.794/259.794/259.794/0.000 ミリ秒 yahoo.com PING yahoo.com (98.138.253.109) 56(84) バイトのデータ。yahoo.com (98.138.253.109) からの 64 バイト: icmp_seq=1 ttl=51 時間=398 ミリ秒

--- yahoo.com ping 統計 --- 送信パケット 1 個、受信パケット 1 個、パケット損失 0%、時間 0 ミリ秒 rtt 最小/平均/最大/平均偏差 = 398.974/398.974/398.974/0.000 ミリ秒

関連情報