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

ダーティな行ソリューションが必要な場合は、コマンドを生成してbashに送信できます。

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

答え3

そのうちの1つが失敗した場合、ループから外れる可能性があります。

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% パケット損失、時間 0ms rtt min/avg/max/mdev = 259.794/259.794/259.794/0.000ms yahoo .com PING yahoo .com (98.138.253.109) 56(84)バイトのデータです。 yahoo.com (98.138.253.109) の 64 バイト: icmp_seq=1 ttl=51 time=398 ms

--- yahoo.com ping 統計 --- 1 パケット転送、1 パケット受信、0% パケット損失、時間 0ms rtt 最小/平均/最大/mdev = 398.974/398.974/398.974/0.000 ms

関連情報