나는 셸 스크립팅을 많이하지 않기 때문에 설명서를git submodule
읽을 때 약간 놀랐고이 설명서에서 사용 된 구문을 보았습니다.
서브 모듈의 명령에서 0이 아닌 리턴은 처리를 종료시킵니다.
|| :
명령 끝에 추가 하여 이를 대체 할 수 있습니다 .
나는 || :
명령이 성공적으로 종료되도록 강제하기위한 속기였습니다. 명령 종료를 성공적으로 수행해야 할 때마다을 사용했습니다 || true
. 되어 || :
더 관용적으로 간주?
답변
true
Bourne 쉘에 내장되지 않았습니다. :
항상 있었다 (그것은 #
소개 되기 전에 주석을 입력하는 방법 이었다).
이 유형 짧은 때문에 즉, 아마도 사람들이 선호하는 주된 이유입니다 :
이상 true
.
(대한 POSIX 쉘에서 또 다른 차이가 있습니다 bash
만 POSIX 모드를) 동안 true
일반 내장이 (심지어 내장 될 필요가 없습니다)이고, :
A는 특수 내장. 이는 몇 가지 영향을 미치며 대부분이 특정 경우에는 영향을 미치지 않을 것입니다.
-
경우
:
명령 때문에 실패 리디렉션의 포함, 실패, 그 출구 쉘됩니다. 실제로 리디렉션을 전달하지 않으면 아마 차이가 없을 것입니다.:
$ 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
로 설정을 유지value
한 후:
하지의 경우, 반환true
:$ var=1; var=2 : ; echo "$var" 2 $ var=1; var=2 true; echo "$var" 1
또한주의 || true
의 껍질에 작품 rc
과 csh
가족이 아닌을 || :
(그러나 취소하지 않기 set -e
에 csh
).
|| :
와 동일하지 않습니다 :
. 다른 방법 (즉, 이전 파이프 라인이 실패한 경우)을 의미 하거나 실행:
합니다.
set -e
false
때문에 출구로 쉘을 야기 set -e
하고 false
비 제로 (실패) 종료 상태가 있습니다. set -e
효과가 취소 된 경우 반환 0이 아닌 종료 상태가 사용되는 명령 상태 에서 같은 :
if false; then ...
while false; do ...
false && : ...
false || : ...
false && :
만 취소합니다 set -e
. 종료 상태를 false || :
취소 set -e
하고 설정 0
하므로 명령의 실패 종료 코드를 무시하고 싶다는 것이 관용적입니다. 대부분 || true
은 더 읽기 쉽다고 주장합니다 (의도를보다 명확하게 전달합니다).
답변
일반적으로 bash에서는 콜론 :
과 true
동일합니다.
|| : 더 관용적 인 것으로 간주?
나는 그것이 문맥에 근거한다고 생각한다 .
a return value
또는 a condition
가 항상 true 인 경우 true
키워드 를 사용해야 합니다. 코드를보다 명확하게 만들고 시청자에게 true 값을 강조하고 싶다는 것을 알려줍니다 .
while true; do something
또는
<commnad>
RETURN_VALUE= $? || true
그리고 아무것도하지 않거나 NOP
쉘에서 작업하려면 콜론을 사용해야합니다.:
if condition
then
: # DO NOTHING HERE
else
do something
fi
또는
while conditon
do
: # DO NOTHING HERE
done
답변
이러한 응답의 대부분은의 가장 일반적인 사용을 해결하지 못합니다 :
.
먼저,이 논의는 Bourne 쉘 ( sh
) 파생물 이 아닌 다른 쉘과 관련이 없습니다 . 즉 모든 Bourne의 파생 껍질을 참조 말했다 true
과 :
같은 일을한다. 프로그래머 는 항상 내장되어 있지는 않았지만 항상 내장 된 것이기 때문에 항상 내장되어 있기 때문에 :
대신에 대신 사용하도록 권장 되었습니다.true
:
true
:
두 가지 용도로 사용됩니다. 의 동의어가 아니지만 #
기능이 다릅니다. 에서 스크립트를 디버깅 할 때 사용되는 set -x
행 #
은 파서에 의해 삭제되고 완전히 무시되는 반면가있는 행 :
은 구문 분석되고 평가됩니다. 이 -x
줄 아래 에 표시되고 평가 후의 값이 표시 되므로 디버깅에 실제로 유용합니다 . 모드 print
에서만 표시되는 명령문을 코드에 넣는 것과 같습니다 -x
. :
실제 코드이므로 부작용으로 인해 프로그램에 영향을 줄 수 있으므로 그 이후 의 값에주의하십시오 .