for 루프에서 AND (&&)를 바꾸려면 어떻게해야합니까?


24

나는 동등한 것을 찾고 싶습니다

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

그러나 for같은 루프 내에서 표현 된 명령

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

첫 번째와 동등한 것을 찾기 위해 두 번째 표현에서 무엇을 제안 하시겠습니까?

답변:


54

원래 순서와 동일합니다.

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

Amit의 대답과의 차이점은 스크립트가 종료되지 않는다는 것입니다. 즉 시퀀스 / 루프를 따르는 잠재적 명령을 실행합니다. 전체 루프의 반환 상태는 항상 내 제안에 따라 사실입니다. 귀하의 경우 관련이 있으면 수정 될 수 있습니다.


1
합의, 이것은 다음의 행동을 더 밀접하게 따른다cmd && cmd
Amit Gold


8

그들 중 하나가 실패하면 루프에서 벗어날 수 있습니다

for i in {1..55}; do
    if ! cmd $i; then
        exit 1
    fi
done

1
@jiliagre가 지적했듯이 (그리고 그의 대답에 수정 사항을 제공했습니다), 이것은 "루프에서 벗어나지"않고 호출 쉘을 종료합니다.
Olivier Dulac

1
break거기에 합법적 이지 않습니까? 나는 그 if진술이 간섭하지 않는다고 확신한다 ..
jpaugh

0

이것이 내가 터미널에서 내 작업을 사용하지 않고 실행하는 방법입니다 &&

 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에서 64 바이트 (172.217.26.174) : icmp_seq = 1 ttl = 56 time = 259ms

--- 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에서 64 바이트 (98.138.253.109) : icmp_seq = 1 ttl = 51 time = 398 ms

--- yahoo.com ping 통계 --- 1 패킷 전송, 1 수신, 0 % 패킷 손실, 시간 0ms rtt min / avg / max / mdev = 398.974 / 398.974 / 398.974 / 0.000 ms

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.