에서 bash
:
$ type :
: is a shell builtin
$ type true
true is a shell builtin
그들은 같은 것처럼 보이지만 동일한 시스템 추적을 제공하지 않습니다.
$ strace :
strace: :: command not found
$ strace true
execve("/bin/true", ["true"], [/* 82 vars */]) = 0
[snip]
exit_group(0) = ?
나는 diffing의 시도 strace bash -c : 2>:.txt
하고 strace bash -c true 2>true.txt
있지만, 메모리 위치를 제외하고 그들 사이의 차이를 찾을 수 없습니다.
에서 dash
:
$ type :
: is a special shell builtin
$ type true
true is a shell builtin
좋아요, 그래서 그들은 같지 않습니다. help :
그리고 help true
매우 유용하지, 그들은 동일한을 반환 bash
하고 dash
. :
3 바이트 를 절약 하고 스크립트를 읽기 어렵게 만드는 것을 제외하고는 그들 사이에 실질적인 차이가 있습니까?
답변
행동에는 실질적인 차이가 없습니다. 두 명령 모두 아무것도하지 않고 성공적인 상태로 종료됩니다. :
아무것도하지 않는 것을 강조한다. true
성공적인 지위를 강조합니다.
strace true
true
쉘 내장 및 외부 명령 ( /bin/true
) 이기 때문에 작동합니다 . :
쉘만 내장되어 있습니다 ( /bin/:
아직 없을 수도 있습니다. 아마도 오래된 유닉스 시스템에 있었을 수도 있습니다). bash에서 시도하십시오
type -a :
type -a true
둘 다 존재하는 이유는 역사적입니다. 올바르게 기억한다면 초기 쉘에는 주석 구문이 없으므로 do-nothing :
명령이 대신 사용되었습니다.
내부에 약간의 차이가 dash
있습니다. git : //git.kernel.org/pub/scm/utils/dash/dash.git에서 소스를 살펴보면에 다른 코드 경로가 표시 eval.c
되지만 다른 눈에 띄게 다른 동작을 만들 수는 없었습니다. special
의 출력 에서 단어보다 type :
.
답변
Bash에서도 동일합니다. 봐 builtins/colon.def
배쉬-4.2 소스 코드입니다.
명령 strace true
에서 실제로 /bin/true
bash 내장 true 대신 바이너리 를 실행하고 있습니다.