如何替换 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 时间=259 毫秒

--- 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

相关内容