bash 접미사 `||:` [중복]

bash 접미사 `||:` [중복]

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를 반환하더라도 스크립트가 계속 실행됩니다.

관련 정보