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

Amit의 답변과의 차이점은 스크립트가 종료되지 않고 시퀀스/루프를 따를 수 있는 기본 명령을 실행하려고 한다는 것입니다. 내 제안에 따르면 전체 루프의 반환 상태는 항상 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.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 핑 통계 --- 1 패킷 전송, 1 패킷 수신, 0% 패킷 손실, 시간 0ms rtt 최소/평균/최대/mdev = 398.974/398.974/398.974/0.000 ms

관련 정보