역사적으로 ,의 Bourne 쉘은 없었 true
와 false
같은 내장 명령. true
대신 :
에 및 false
에 비슷한 별칭이 지정되었습니다 let 0
.
:
true
고대 Bourne에서 파생 된 포탄에 대한 이식성 보다 약간 낫습니다 . 간단한 예로, !
파이프 라인 연산자 나 ||
목록 연산자 를 사용하지 않는 것이 좋습니다 (일부 Bourne 쉘의 경우와 동일). 종료 상태를 기반으로 분기의 유일한 수단으로 명령문 의 else
절을 남깁니다 if
.
if command; then :; else ...; fi
이후 if
비어 요구 then
절을하고 의견이 비어로 계산하지 않는, :
무 조작의 역할을한다.
요즘 (즉, 현대적인 맥락에서) 일반적으로 :
또는을 사용할 수 있습니다 true
. 둘 다 POSIX에 의해 지정되며 일부는 true
읽기가 쉽습니다. 그러나 거기에 한 가지 흥미로운 차이점은 :
소위 POSIX의입니다 내장 된 특수는 반면, true
A는 내장 된 일반 .
쉘에 특수 내장 기능이 내장되어 있어야합니다. 일반 내장 기능은 "일반적으로"내장되어 있지만 엄격하게 보장되지는 않습니다. 일반적으로 대부분의 시스템의 PATH :
에서 기능 이있는 정규 프로그램이 없어야 true
합니다.
아마도 가장 중요한 차이점은 특수 내장 기능을 사용하면 간단한 명령 평가 중 환경에서도 내장 기능에 의해 설정된 모든 변수가 ksh93을 사용하여 명령을 완료 한 후에 명령이 완료된 후에도 지속된다는 것입니다.
$ unset x; ( x=hi :; echo "$x" )
hi
$ ( x=hi true; echo "$x" )
$
Zsh는 POSIX 호환 모드에서 작동 할 때를 제외하고 GNU Bash와 마찬가지로이 요구 사항을 무시하지만, 모든 주요 "POSIX sh 파생"쉘은 dash, ksh93 및 mksh를 포함하여이를 관찰합니다.
또 다른 차이점은 일반 내장 기능이 호환되어야한다는 것입니다 exec
-여기 Bash를 사용하여 설명하십시오.
$ ( exec : )
-bash: exec: :: not found
$ ( exec true )
$
POSIX는 물론 구현 관련 세부 사항이지만 :
보다 빠를 수도 있음을 명시 적으로 지적합니다 true
.