~는 $ HOME이지만 때로는?


14

cd ~

와 같은 일을

cd $HOME

이것은 또한

cd /home/tandu

하나,

cd ~not-tandu

로 변경 /home/not-tandu

이것이 순전히 구문 선택입니까? 이것은 커널 (또는 실행 파일)에 의해 어떻게 처리 cd됩니까? ~다른 모든 것을 생략하면 슬래시를 추가 하는 특별한 경우 가 있습니까? 그 말을하는 것입니다, ~/그리고 ~같은 디렉토리로 변경,하지만 ~a하나의 디렉토리까지입니다. 다른 디렉토리로 변경해도 마찬가지입니다.


3
~ not-tandu와 ~ / not-tandu를 비교해보십시오. 하나는 사용자가 아닌 tandu 홈 디렉토리를 가리키고 다른 하나는 homedir의 비 tandu를 가리 킵니다.
Johan

4
커널이나 "cd 실행 파일"이 아닙니다 (그러한 것이 없기 때문에)-내장 된 쉘입니다.
Paul Tomblin

언급하지 않았으므로 cd매개 변수가 없으면 다음과 같이 작동합니다 cd ~. 당신이 교체하는 경우 cdecho당신은 표현이 쉘에 의해 확장 무엇을 볼 수 있습니다.
jofel

답변:


18

~$HOME여러 쉘에서 제공 하는 별명 이지만 $HOME더 보편적입니다. $HOME실제로 쉘에 환경 변수 HOME을 여기에 삽입 (대체)하도록 요청합니다. 대체 할 수있는 환경 변수가 많이 있습니다 env. 목록을 실행 하십시오. 참고 ~는 단어의 시작 부분에 있지 때 항상 인식되지 않습니다. 다음 두 명령을 비교해보십시오.

ls /~
ls /$HOME

첫 번째는 ls 실행 파일로 전달 /~된 다음 ~루트 디렉토리에서 호출 된 파일을 보려고 시도 하고 두 번째는 확장 $HOME되어 //home/userls 실행 파일에 명령 행 인수로 전달됩니다. 하나는 너무 슬래시로 모든 POSIX 시스템 (POSIX는 UNIX 및 Linux 시스템이 어떻게 작동하는지에 대한 표준) 여러 슬래시가 동일하게 취급 할 수 있도록 //home/user말과 동일합니다 /home/user. ~username쉘이 passwd 파일에서 username을 찾아보고 홈 디렉토리를 리턴하도록 지시하는 단축키입니다. 동등한 환경 변수가 없습니다. 이러한 모든 대체는 쉘에 의해 수행되며 대부분에서 $HOME지원되지만 모든 환경에서 지원되는 환경 변수 만 보장됩니다. 또한,cd실제로는 내장 명령입니다. 쉘 자체에게 디렉토리를 변경하도록 지시하는 특수 지시문입니다. echo쉘 프로세스의 기본 속성을 변경하는 데 사용되므로 별도의 실행 파일로 구현할 수있는 다른 쉘 내장과 는 다릅니다. echo성능상의 이유로 내장 된 셸일뿐 아니라 유닉스가 좋은 시절에는 자체 실행 파일로만 사용할 수있었습니다 /bin/echo.


"그런 다음 루트 디렉토리에서 ~라는 파일을 보려고합니다"; 그것은 모든 유닉스 맛에 대한 것입니까?
Pacerier

17

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

이것은 커널에 의해 수행되지 않으며, 쉘에 의해 해석됩니다. 쉘이 ~foo인수로 간주 될 때마다 쉘 은 사용자의 홈 디렉토리로 투명하게 대체하고 대신 해당 디렉토리를 foo전달합니다. 따라서 실행할 때 cd ~tandu쉘은 실제로 실행 cd /home/tandu됩니다.


1
이 대체물은 무엇이며 어떤 알고리즘으로 대체됩니까? 아니면 cd껍질입니까? 쉘을 실행하지 않으면 어떻게됩니까? "~ 다음에 다른 것이 있으면 다르게 확장됩니까?" 또는이 독특한 조건에 대한 다른 특별한 처리가 있습니까?
폭발 약

8
Tilde ExpansionBash 매뉴얼을 참조하십시오 . (많은 다른 쉘과 프로그램도 비슷한 규칙을 따릅니다.)
cjm

4
@tandu : 쉘은 cd외부 실행 파일이 없다 (가능하지 않다)
Mat

1
@tandu : 쉘을 실행하지 않는 경우 (예 :을 사용하여 시도 exec(2)) 쉘 확장이 수행되지 않습니다. 쉘 확장이 없으면 ~다른 것으로 대체되지 않습니다. 이는 완전히 다른 유효한 캐릭터 일뿐입니다. /bin/shgros하지 않았기 때문에 이것은 초기 SunOS 시절에 나를 물었습니다 ~.
Alexios

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.