쉘 스크립팅을별로하지 않아서 을 읽을 때 조금 놀랐습니다. git submodule
에 대한 문서와이 문서에서 사용한 구문을 확인했습니다.
A 하위 모듈의 명령에서 0이 아닌 값을 반환하면 처리가 종료됩니다. 명령 끝에
|| :
를 추가하여 무시할 수 있습니다.
|| :
는 명령이 성공적으로 종료되도록하는 약어라는 것을 찾아야했습니다. 명령을 성공적으로 종료해야 할 때마다 , 저는 || true
를 사용했습니다. || :
가 더 관용적 인 것으로 간주 되나요?
댓글
Answer
true
는 Bourne 셸에 내장되지 않았습니다. :
는 항상 그렇습니다 (#
가 도입되기 전에 주석을 입력하는 방법).
그 이유는 입력하는 것이 더 짧기 때문에 사람들이 true
보다 :
를 선호하는 주된 이유 일 것입니다.
다른 차이점에 유의하세요. POSIX 쉘 (bash
의 경우 POSIX 모드에서만) : 반면 true
는 일반 내장 (내장 할 필요도 없음)입니다. , :
는 특별한 내장입니다. 여기에는 몇 가지 의미가 있으며 대부분은이 특정 경우에 영향을 미치지 않을 것입니다.
-
:
명령이 실패하면 실패한 리디렉션으로 인해 쉘이 종료됩니다. 실제로는 리디렉션을:
$ sh -c ": > / ; echo HERE" sh: 1: cannot create /: Is a directory $ sh -c "true > /; echo HERE" sh: 1: cannot create /: Is a directory HERE
-
var=value :
에서var
는 iv id = 이후value
로 설정됩니다. “2e9c356ccf”>
는 true
의 경우가 아닌 반환 :
$ var=1; var=2 : ; echo "$var" 2 $ var=1; var=2 true; echo "$var" 1
또한 || true
는 rc
및 csh
의 셸에서 작동합니다. 가족이지만 || :
가 아닙니다 (그러나 csh
에서 set -e
를 취소하지 않음).
|| :
는 :
와 다릅니다. 또는 실행 :
그렇지 않으면 (즉, 이전 파이프 라인이 실패하는 경우)
set -e false
set -e
(일명 errexit
옵션) 및 의 종료 상태가 0이 아닙니다 (실패). 0이 아닌 종료 상태를 반환하는 명령이 다음과 같은 조건 으로 사용되면 set -e
효과가 취소됩니다.
if false; then ... while false; do ... false && : ... false || : ...
false && :
는 set -e
만 취소합니다. false || :
는 set -e
의 효과를 취소하고 종료 상태를 0
로 설정하므로 더 관용적입니다. 명령의 실패 종료 코드를 무시하고 싶다고 말합니다. 대부분의 사람들은 || true
가 더 읽기 쉽다고 주장합니다 (의도를 더 명확하게 전달).
댓글
-
&& :
는 훌륭합니다. 이에 대한 문서 나 추가 자료가 있습니까? Google은 이런 종류의 키워드를 찾으려고하는데 부족합니다…
답변
대부분의 응답은 :
의 가장 일반적인 사용을 해결합니다.
먼저,이 토론은 Bourne shell (sh
) 파생. 즉, 모든 Bourne 파생 쉘은 true
및 :
를 동일한 것으로 간주합니다. 프로그래머는 true
대신 :
를 사용하는 것이 좋습니다. :
는 항상 이전에는 true
가 항상 내장 된 것이 아니었던 경우가있었습니다.
:
에는 두 가지 용도. #
의 동의어는 아니지만 기능이 다릅니다. set -x
에서 스크립트를 디버깅 할 때 #
가 사용 된 줄은 파서에 의해 삭제되고 완전히 무시되지만
는 구문 분석되고 평가됩니다. 이는 -x
아래에 해당 줄이 표시되고 평가 후 해당 값이 표시되므로 디버깅에 매우 유용합니다.이는 -x
모드에서만 표시되는 print
문을 코드에 넣는 것과 같습니다. :
뒤의 값은 실제 코드이고 부작용이 프로그램에 영향을 미칠 수 있으므로주의하세요.
댓글
- 두 번째 용도는 무엇입니까?
답변
일반적으로 bash에서는 콜론 :
및 true
는 동일합니다.
Is | | : 더 관용적이라고 생각하십니까?
문맥 .
return value
를 원하거나 condition
가 항상 true 인 경우 , true
키워드를 사용해야합니다. 그러면 코드가 더 명확 해지고 시청자에게 가치를 강조하고 싶다는 것을 알릴 수 있습니다. true , 즉 :
while true; do something
또는
<commnad> RETURN_VALUE= $? || true
아무것도하지 않으려면 또는 NOP
셸에서는 콜론 :
if condition then : # DO NOTHING HERE else do something fi
또는
||:
(공백 없음)가 bash에서도 유효하다는 점에 주목할 가치가 있습니다.|| :
또는|| true
와 동일한 작업을 수행합니다.