programing

Linux Bash에서 더블 앰퍼샌드(&&)와 세미콜론(;)의 차이점은 무엇입니까?

powerit 2023. 5. 23. 22:31
반응형

Linux Bash에서 더블 앰퍼샌드(&&)와 세미콜론(;)의 차이점은 무엇입니까?

Linux Bash에서 앰퍼샌드와 세미콜론의 차이점은 무엇입니까?

예를들면,

$ command1 && command2

$ command1; command2

&&연산자는 부울 AND 연산자입니다. 왼쪽이 0이 아닌 종료 상태를 반환하면 연산자는 해당 상태를 반환하고 오른쪽을 평가하지 않습니다(단락). 그렇지 않으면 오른쪽을 평가하고 종료 상태를 반환합니다.이것은 일반적으로 다음을 확인하는 데 사용됩니다.command2다음과 같은 경우에만 실행됩니다.command1성공적으로 실행되었습니다.

;토큰은 명령만 구분하므로 첫 번째 명령의 성공 여부에 관계없이 두 번째 명령을 실행합니다.

command1 & & command2

command1 && command2실행.command2if (그리고 if)command1실행이 성공적으로 종료됩니다.유닉스 전문 용어에서, 그것은 종료 코드/반환 코드가 0과 같다는 을 의미합니다.

command1; command2

command1; command2실행.command2실행 후command1순차적으로명령이 성공했는지 여부는 중요하지 않습니다.

전자는 단순한 논리입니다.AND단락 평가를 사용하여 후자는 단순히 두 개의 명령을 구분합니다.

실제로 일어나는 일은 첫 번째 프로그램이 0이 아닌 종료 코드를 반환할 때 전체가AND로 평가됩니다.FALSE두 번째 명령은 실행되지 않습니다.후자는 단순히 두 가지를 순서대로 실행합니다.

cmd1 ; cmd2

cmd1을 실행한 다음 cmd2를 실행합니다.

cmd1 && cmd2

cmd1이 코드 0으로 종료된 경우 cmd2를 실행합니다.

둘 다 마지막으로 실행된 명령의 상태 코드를 생성합니다.

하지만, 다른 답들이 놓친 것은...

라고 생각하실 수도 있습니다.cmd1 && cmd2그리고.(cmd1 && cmd2)동일합니다.사실, 그들은 매우 다릅니다.부모 없이 실패하는 명령은 그대로입니다.

다음 사항을 고려합니다.상태 코드는 주석을 제거하여 결정됩니다.set -e

#!/bin/bash
set -e # exit on error
set -x

# false    # Yields status 1 and would cause the script to exit if -x is left uncommented

true && true     # Does not exit script! Good
echo A $?        # 0

false && true    # Does not exit script! Wut?
echo B $?        # 1

true && false    # Exits the script.  Wut? Wut?
echo C $?        # 1, if not -e

(false && true)  # Exits the script
echo D $?        # 1, if not -e

(true && false)  # Exits the script
echo E $?        # 1, if not -e

D와 E는 의미가 있고, 다른 것들과의 차이는 의미가 있습니다 - 부모는 하위 셸을 만듭니다.그러나 다음 두 가지 모두 상태가 1이지만 스크립트가 종료되는 시간이 몇 초밖에 되지 않는다는 것은 참으로 이상한 일입니다.

false && true  
true && false 

언급URL : https://stackoverflow.com/questions/25669540/what-is-the-difference-between-double-ampersand-and-semicolon-in-linux

반응형