如何替換 for 迴圈中的 AND (&&)?

如何替換 for 迴圈中的 AND (&&)?

我想找一個相當於

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

但用循環內表達的命令,for

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

您建議對第二個表達式進行哪些變更以找到第一個表達式的等效項?

答案1

相當於你的原始序列是:

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

與阿米特的答案的不同之處在於腳本不會退出,即將執行可能遵循序列/循環的潛在命令。請注意,根據我的建議,整個循環的返回狀態將始終為 true,如果與您的情況相關,這可能會被修復。

答案2

如果您想要一個骯髒的單行解決方案,您可以建立一個命令並將其發送到 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% 資料包遺失,時間0ms rtt min/avg/max/mdev = 259.794/259.794/259.794/0.000 ms 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% 資料包遺失,時間 0ms rtt min/avg/max/mdev = 398.974/398.974/398.974/0.000 ms

相關內容