엘리아는 이에 대한 답변을 많이했지만 " echo
배쉬 프로그램 과 다른 버전이 왜 다른가"에 대해 언급하고 싶습니다 . 그건 잘못된 질문입니다.
올바른 질문은 : 왜 이것이 완벽하게 훌륭한 외부 명령이되었을 수 있었을 때 처음에 내장 된 것 입니까?
간단하게하기 위해, 38에서 굵은 선으로 된 대시를 살펴보십시오 (bash는 61로, 출력은 compgen -b
).
. continue getopts readonly type
: echo hash return ulimit
[ eval jobs set umask
alias exec kill shift unalias
bg exit local test unset
break export printf times wait
cd false pwd trap
command fg read true
얼마나 많은 이들이 필요 내장 매크로로? [
, echo
, false
, printf
, pwd
, test
, 그리고 true
하지 않습니다 필요가 내장 명령으로 : 그들은 단지 내장이 할 수있는 일을하지 않는다 (영향을 미치거나 외부 명령에 사용할 수없는 쉘 상태를 얻을). Bash printf
는 최소한 내장 기능을 활용 printf -v var
합니다 var
. 출력을 변수에 저장합니다 . time
bash는 또한 특별합니다. 키워드를 사용하면 bash에서 임의의 명령 목록에 시간을 지정할 수 있습니다 (대시에는 time
동등한 것이 없습니다 ). pwd
내장 명령 일 필요는 없습니다. 외부 명령은 현재 작업 디렉토리를 상속받습니다 (또한 외부 명령 이기도 함).:
예외입니다-NOP가 필요 :
합니다. 나머지는 외부 명령으로 쉽게 수행 할 수있는 작업을 수행합니다.
따라서이 내장의 5 분의 1은 내장 할 필요가 없습니다. 그땐 왜? 맨 페이지 * 실제로 이러한 내장 명령 (강조 광산) 왜 지나가는 설명 :dash
내장
이 섹션에는 내장 명령이 나열되어 있습니다.
별도의 작업으로는 수행 할 수없는 작업을 수행해야합니다.
방법. 이 외에도 몇 가지 다른 명령이있을 수 있습니다.
효율성을 위해 내장되어 있어야합니다 (예 : printf (1), echo (1), test (1) 등).
이 내장은 대화식으로 그리고 스크립트에서 자주 사용되며 기능이 단순하여 쉘이 작업을 수행 할 수 있기 때문에 매우 간단합니다. 그리고 일 : 일부 (? 대부분의) 껍질이 일에했다 ** 다시 돌아갑니다. 에서 2.9 BSD , 당신은 찾을 수 없을 것이다 내장을.sh
echo
따라서 최소한의 쉘이 내장 명령과 같은 명령을 건너 뛸 수 있다는 것이 전적으로 가능합니다 (그러나 현재 쉘은 그렇게 생각하지 않습니다). GNU coreutils 프로젝트는 특정 쉘에서 실행한다고 가정하지 않으며 POSIX에는 이러한 명령이 필요합니다. 따라서 coreutils는 어쨌든 이러한 기능을 제공하며 셸 외부에서 의미가없는 것을 생략합니다.
* 이것은 Almquist 쉘에 해당하는 맨 페이지 텍스트와 거의 동일 합니다. 데비안 Almquist 쉘은 대시를 기반으로합니다.
** zsh
극단적 인이 생각한다 : 다양한 모듈을로드하여 얻을 명령을 같은 zmv
, 당신도 들어갈 필요는 쉘을 생각하지 않을 것입니다 . 그 시점에서 실제 질문은 다음과 같습니다. 왜 이러한 모든 내장 기능이있는 zsh 대신 bash를 사용합니까?