Linux Bash에서 더블 앰퍼샌드(&&)와 세미콜론(;)의 차이점은 무엇입니까?
Linux Bash에서 앰퍼샌드와 세미콜론의 차이점은 무엇입니까?
예를들면,
$ command1 && command2
대
$ command1; command2
그&&
연산자는 부울 AND 연산자입니다. 왼쪽이 0이 아닌 종료 상태를 반환하면 연산자는 해당 상태를 반환하고 오른쪽을 평가하지 않습니다(단락). 그렇지 않으면 오른쪽을 평가하고 종료 상태를 반환합니다.이것은 일반적으로 다음을 확인하는 데 사용됩니다.command2
다음과 같은 경우에만 실행됩니다.command1
성공적으로 실행되었습니다.
그;
토큰은 명령만 구분하므로 첫 번째 명령의 성공 여부에 관계없이 두 번째 명령을 실행합니다.
command1 & & command2
command1 && command2
실행.command2
if (그리고 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
'programing' 카테고리의 다른 글
NameError를 제공하는 모듈을 다시 로드하는 중: 이름 'reload'가 정의되지 않았습니다. (0) | 2023.05.23 |
---|---|
변경된 입력 텍스트 상자 탐지 (0) | 2023.05.23 |
날짜 시간입니다.기능의 성능을 측정하는 가장 좋은 방법은 무엇입니까? (0) | 2023.05.23 |
엑셀 파일의 문자 인코딩을 확인하려면 어떻게 해야 합니까? (0) | 2023.05.23 |
iOS 7 반투명 UI 탐색 모음을 위한 밝고 선명한 색상 구현 (0) | 2023.05.23 |