“command && command”와“command의 차이점은 무엇입니까? 명령"


49

Ubuntu "command && command"및 "command; command"에서이 두 가지 사용법을 봅니다.
예 :apt-get update && apt-get upgrade

내가 사용하면 무엇이 다릅니 apt-get update; apt-get upgrade까?
나는이 특정 사용법을 요구하지 않지만 일반적 으로이 두 사용법의 차이점은 무엇입니까?


2
Win 명령 줄과 배치는 동일한 기능을 갖습니다 & (simple sequencing), && (conditional AND) and || (conditional OR).
Karan

5
참조 : Bash Reference Manual – 명령 목록 . 일반적으로 문서에서 찾을 수있는 것은 없습니다. 특정 구문 요소에 대해 궁금한 점이 있는지 살펴볼 가치가 있습니다.
slhck

1
@Karan 그리고 bash (linux / Ubuntu)도 완전성을 위해 ||있습니다.
이즈 카타

답변:


88

&&논리 연산자입니다. ;간단한 시퀀싱입니다.

에서 cmd1 && cmd2CMD1 성공적인 리턴 코드로 종료하는 경우, CMD2에만 실행됩니다.

반면에 cmd1; cmd2cmd2는 cmd1의 종료 상태에 관계없이 실행됩니다 (스크립트 또는 기타 오류로 인해 쉘이 종료되도록 설정하지 않은 경우).

관련 메모 cmd1 || cmd2에서 ||'OR'논리 연산자를 사용하여 cmd2는 cmd1이 실패한 경우에만 실행됩니다 (0이 아닌 종료 코드를 리턴 함).

이러한 논리 연산자는 기본 if 문 대신 스크립트에서 사용되기도합니다. 예를 들어

if [[ -f "$foo" ]]; then mv "$foo" "${foo%.txt}.mkd"; fi

...보다 간결하게 달성 할 수 있습니다 :

[[ -f "$foo" ]] && mv "$foo" "${foo%.txt}.mkd"

내 이해에서 성공적인 반환 코드는 0을 의미하기 때문에 약간 잘못되었습니다. 이는 bool로 캐스팅 할 때 논리적 인 거짓을줍니다. 따라서 대부분의 언어에서 사용되는 맥 캐시 평가의 철학에 따라 다음 문장을 평가 (실행)하는 대신 즉시 거짓을 반환해야합니다.
Della

33

통사론

command1 && command2

command2command1종료 상태가 0 ( true )을리턴하는경우에만 실행됩니다. 즉, 실행command1하고 성공하면을 실행하십시오command2.

command1 ; command2

command1command2 는 모두 관계없이 실행됩니다. 세미콜론을 사용하면 한 줄에 많은 명령을 입력 할 수 있습니다.

관련 :

command1 || command2

Command2를이 경우 실행되고, 경우에만, 지령 1은 0이 아닌 종료 상태를 반환합니다. 즉,command1성공적으로 실행하거나 실행하십시오command2.


&& 운영자:

$ rm /tmp/filename && echo "File deleted"

; 운영자:

$ echo "foo" ; echo "bar"

|| 운영자:

$ cat /tmp/filename 2>/dev/null || echo "Failed to open file"

외부 링크

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