쉘 내장 명령은 대문자로 실행할 수 없지만 다른 명령은 실행할 수 있는 이유는 무엇입니까?

쉘 내장 명령은 대문자로 실행할 수 없지만 다른 명령은 실행할 수 있는 이유는 무엇입니까?

왜 이런거야?

내가 할 때

CD ~/Desktop

데스크톱으로 이동하지 않습니다. 하지만 이것은:

echo "foo
bar" | GREP bar

나에게주세요:

bar

답변1

다른 질문으로 판단하면 OS X를 사용하고 있다고 가정합니다. OS의 기본 HFS+ 파일 시스템 Cygwin에서 또는 FAT32와 같은 대소문자를 구분하지 않는 파일 시스템을 사용하거나CIOPFS) 어디서나.

실제 실행 파일 이므로 grep파일 시스템(디렉토리 PATH)을 살펴봅니다. 쉘이 /usr/bin또는 를 grep찾으면 실행 파일을 GREP찾습니다 grep.

쉘 내장 함수는 다음과 같습니다.아니요파일 시스템에서 찾기: 내장되어 있기 때문에 쉘 자체 내에서 (대소문자 구분) 문자열 비교를 통해 액세스할 수 있습니다.

당신이 만난 것은 흥미로운 사례입니다. while cd은 내장 함수이고 액세스 시 대소문자를 구분하며 CD실행 파일로 발견됩니다 /usr/bin/cd. 실행 파일은 cd쓸모가 없습니다: 왜냐하면cd항상 일반 쉘 내장으로 제공되는 현재 쉘 실행 환경에 영향을 줍니다.cd, 실행 파일이 있습니다.POSIX를 위해그럼에도 불구하고 자체 디렉터리를 변경한 다음 즉시 종료되고 주변 셸은 시작된 위치에 그대로 남아 있습니다.

다음 명령을 사용하여 시도해 볼 수 있습니다.type내장:

$ type cd
cd is a shell builtin
$ type CD
CD is /usr/bin/CD

type이 명령을 실행할 때 쉘이 수행할 작업을 알려줍니다. 실행하면 cd내장 프로그램에 액세스하지만 CD실행 파일을 찾습니다. 다른 내장 기능과 마찬가지로 내장 기능과 실행 파일도 상당히 호환되지만(try echo) cd이는 불가능합니다.

관련 정보