~는 $HOME이지만 가끔은요?

~는 $HOME이지만 가끔은요?

CD~

같은 일을

cd $HOME

이것은 또한 관련이 있습니다

cd /home/tandu

하지만,

cd ~not-tandu

로 변경/home/not-tandu

이것은 순전히 문법적인 선택입니까? 커널(또는 cd실행 파일)은 이를 어떻게 처리합니까? 다른 모든 항목이 생략된 경우 슬래시를 추가해야 하는 특별한 경우가 있습니까 ~? 즉, 같은 디렉터리로 ~/변경하면 이전 디렉터리일 뿐입니다. 이는 변경하는 다른 디렉토리의 경우에는 해당되지 않습니다.~~a

답변1

~$HOME많은 쉘에서 제공되는 별칭이지만 $HOME더 일반적입니다. $HOME실제로 여기에 환경 변수 HOME을 삽입(교체)하도록 쉘에 요청합니다. 교체할 수 있는 다양한 환경 변수가 있습니다. env목록을 실행해 보세요. ~단어의 시작 부분에 있지 않으면 항상 인식되지는 않습니다 . 비교하려면 다음 두 명령을 사용해 보세요.

ls /~
ls /$HOME

첫 번째는 ls 실행 파일에 전달된 다음 루트 디렉터리에서 호출된 파일을 /~보려고 시도하고 , 두 번째는 확장된 다음 ls 실행 파일에 명령줄 인수로 전달 됩니다 . 모든 POSIX 시스템(POSIX는 UNIX 및 Linux 시스템 작동 방식의 표준)에서는 여러 개의 슬래시가 하나의 슬래시와 동일하게 처리되도록 허용하므로 이는 다음과 같습니다 . passwd 파일에서 사용자 이름을 찾아 홈 디렉터리로 돌아가도록 쉘에 지시하는 바로 가기입니다. 동등한 환경 변수가 없습니다. 이러한 모든 교체는 셸에서 수행되며 대부분의 셸에서 지원되지만 이와 같은 환경 변수만 모든 셸에서 지원된다는 것을 보장합니다. 게다가 이는 실제로 내장된 명령입니다. 이는 쉘 자체에 디렉토리를 변경하라고 지시하는 특수 명령입니다. 쉘 프로세스의 기본 속성을 변경하는 데 사용되므로 다른 쉘 내장과 같이 별도의 실행 파일로 구현되지 않습니다 . 성능상의 이유로 내장된 셸일 뿐이지만 예전 UNIX에서는 자체 실행 파일로만 사용할 수 있었습니다 .~$HOME//home/user//home/user/home/user~username$HOMEcdechoecho/bin/echo

답변2

~foo"사용자 foo의 홈 디렉토리"를 의미합니다.

이는 커널에 의해 수행되지 않고 쉘에 의해 해석됩니다. 쉘은 ~foo인수를 볼 때마다 이를 사용자의 홈 디렉토리로 투명하게 바꾸고 foo그 자리에 전달합니다. 따라서 실행하면 cd ~tandu쉘이 실제로 실행됩니다 cd /home/tandu.

답변3

~뒤에 오는 사용자 이름은 해당 사용자의 홈 디렉터리로 확장됩니다.

관련 정보