Bash / sh-&&와;의 차이점


136

나는 일반적으로 ;한 줄에 여러 명령을 결합 하는 데 사용 하지만 일부 사람들은 선호합니다 &&. 차이점이 있습니까? 예를 들어, cd ~; cd -cd ~ && cd -같은 일을 할 것으로 보인다. 어떤 버전이 더 이식성이 좋습니까? 예를 들어 Android의 쉘과 같은 bash-subset에서 지원됩니까?

답변:


193

이전 명령이 실패 ;하면 두 번째 명령 이 실행됩니다.

그러나 &&두 번째로는 실행되지 않습니다.

이것은 오퍼레이션 사이의 "게으른"논리 "AND"피연산자입니다.


2
다시 말해서 단락 동작이 있습니다
peterchaula

@ 피터 어느 쪽? ;하나 또는 &&하나? 아니면 둘 다 의미합니까?
Shayan

@Shayan &&.
peterchaula

57

내가 사용하고 &&근처의 컴퓨터에 있기 때문에 오래 전에 :

root# pwd
/
root# cd /tnp/test; rm -rf *
cd: /tnp/test: No such file or directory
...
... and after a while ...
...   
^C

그러나 도움이되지 않았습니다 ...;)

cd /tnp/test && rm -rf * 는 안전하다... ;)


26
더 안전하게하기 위해, 사용 rm -rf /tnp/test
하겠습니다

5
더 안전하려면 rm /tnp/test/ -rf치명적인 실수로 미스 클릭을 방지하는 데 사용하는 것이 좋습니다
radrow

22

에서 cmd1 && cmd2, cmd2경우에만 실행됩니다 cmd1(수익률 0) 성공합니다.

에서는 cmd1 ; cmd2, cmd2어떤 경우에 실행된다.

두 구문 모두 POSIX 호환 쉘의 일부입니다.


11

&&이전 상태가 0으로 종료 된 경우 다음 명령을 실행하는 것을 의미합니다. 반대의 ||경우 이전 명령이 0이 아닌 상태로 종료되는 경우 ;항상 실행됩니다.

이전 명령이 완료되었는지 여부에 따라 특정 조치를 취해야 할 때 매우 유용합니다.


5

로 구분 된 명령 ;은 완료 상태에 관계없이 순차적으로 실행됩니다.

&&두 번째 명령은 첫 번째 명령이 성공적으로 완료된 경우에만 실행됩니다 (종료 상태 0을 반환 함).

이것은 아래의 bash 맨 페이지에서 다룹니다 Lists. 유닉스와 같은 쉘 이이 두 연산자를 모두 지원할 것으로 기대하지만 Android 쉘에 대해서는 구체적으로 알지 못합니다.


2
다음은 bash 매뉴얼에 대한 링크입니다. gnu.org/software/bash/manual/bashref.html#Lists
glenn jackman

3

&&;항상 두 번째 명령이 실행되는 동안 조건부 실행을 허용합니다 .

예를 들어 command1 && command2,로 끝나는 command2경우에만 실행되며 모든 신호가 제대로 전달되었지만 두 번째 명령에서는 결과가 무엇이든 항상 실행 됩니다.command1exit 0command1 ; command2command1


1

&&는 논리적 인 bash입니다. Bash에는 논리 AND의 단락 평가가 있습니다. 이 관용구는 다음을 표현하는 가장 간단한 방법입니다.


cmd1;rc=$?
if [ $rc -eq 0 ]; then
   cmd2
fi

반면; 버전은 단지 :


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