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.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 time=398 ms

--- yahoo.com 핑 통계 --- 전송된 패킷 1개, 수신된 패킷 1개, 패킷 손실 0%, 시간 0ms rtt 최소/평균/최대/mdev = 398.974/398.974/398.974/0.000ms

관련 정보