Bash의 구문은 무엇입니까||:
하다?
예
$ ls foo ||:
항상 성공을 거두는 것 외에 특별한 것이 있나요?
$ ls foo ||:; echo $?
ls foo
존재하지 않아서 실패 하더라도 foo
출력은 항상 0이 될까요?
로 시작하는 스크립트에서 봤습니다 set -e
. 따라서 오류가 발생하지 않도록 보장하므로 이 접미사가 붙은 명령이 오류를 반환하더라도 스크립트가 즉시 종료되지는 않을 것 같습니다.
답변1
이전 명령이 성공을 반환하지 않은 경우에만 성공을 반환합니다.
set -e
(일명 )을 사용하면 set -o errexit
오류를 반환하는 명령줄이 스크립트를 중단합니다. ||:
명령줄 끝에 추가하면 오류가 발생하지 않습니다(오류가 있으면 다음 명령이 true를 반환하기 때문).
기본적으로는 다음과 같습니다. 이전 명령에 오류가 있으면 true
명령줄이 오류 없이 끝나고 스크립트가 계속 실행될 수 있도록 실행하세요.
ls
오류가 반환되었기 때문에 날짜를 표시하지 않고 스크립트가 중단됩니다 .
set -e
ls -l /tmp/nonexistentfile
date
:
그러나 마지막 명령이 ( true
) 이므로 스크립트가 중단되지 않고 날짜가 표시됩니다 .
set -e
ls -l /tmp/nonexistentfile || :
date
답변2
여기에는 두 가지 별도의 구문이 있습니다.
|| This is the OR symbol.
: This is a dummy command which will return a success (return code 0)
명령과 함께 사용하면 해당 명령을 먼저 실행하고 첫 번째 명령의 반환 코드에 관계없이 해당 줄에서 "성공"을 반환하게 됩니다. 명령이 True를 반환하므로 :
OR(아무것도 성공적으로 수행되지 않음)가 반환됩니다.
스크립트의 명령문 중 하나라도 False를 반환하면 그 명령문만으로도 set -e
스크립트를 종료하는 효과가 있습니다. 따라서 ||:
"가드" 역할을 하면 해당 줄의 명령이 False를 반환하더라도 스크립트가 계속 실행됩니다.