쉘 스크립팅을별로하지 않아서 을 읽을 때 조금 놀랐습니다. 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와 동일한 작업을 수행합니다.