편집 : 이것은 /programming/998626/meaning-of-tilde-in-linux-bash-not-home-directory/ 의 복제본입니다 . 이 질문을 중복으로 끝내는 것으로 유명하지 않습니다.
나는 ~
홈 디렉토리에서와 같이 말하는 것이 아니라 오히려 이것을 참조한다.
$ ls ~foo/bar
/some/mount/point/foo/bar
그러나 다른 마운트 포인트로 시도하면 다음과 같습니다.
$ mount | ag "/dev "
devfs on /dev (devfs, local, nobrowse)
$ ls /dev/stdin
/dev/stdin
$ ls ~stdin
zsh: no such user or named directory: stdin .
# bash has a similar error message:
ls: ~stdin: No such file or directory
~
이 맥락에서 무엇이 부름입니까? 어떻게 작동합니까?
편집 : 아래의 의견 중 일부에 대한 자세한 내용 :
foo
내 시스템의 사용자 이름이 아님을 증명할 수 있습니다 .- 자동 완성을 시도 할 때
ls -lah ~
모든 옵션이 표시되지는 않습니다. 즉 , 자동 완성에 표시되지 않는cd ~qux
경우 할 수qux
있습니다. 다시 한 번qux
내 시스템의 사용자가 아닙니다. - 중요한
/some/mount/point
것은 네트워크 공유입니다. - 모든 세부 사항은 경로 이름 확장의 Z 쉘 기능인 일부 이름이 지정된 경로 muckery를 제안하지만 이것은 Z 쉘의 이름 지정된 경로와 같은 것을 지원하지 않는 bash에서도 작동합니다.
/some/mount/point
분명히 내 홈 디렉토리가 아닙니다. cd ~
저를 필요 /Users/$username/
실현합니다 경기$HOME
zsh
물결표를 사용하여 명명 된 디렉토리를 나타내는 것으로 나타납니다.
bash -c "ls ~foo/bar"
)-이름이 지정된 디렉토리는 없습니다. 또한 zsh 내에서도를 검사하면 env
명명 된 디렉토리가 설정되어 있지 않습니다. Mac OS를 사용 중이며 이것이 OS X에만 해당되는 기능이라고 생각합니다.
~foo
. 실제 문자열 (예는 foo
아님)을 가져 와서 수행하십시오 grep "actual username" /etc/passwd
. bash 매뉴얼에 따라 가능한 로그인 사용자 이름 ~text
에서만 작동해야합니다 ( 예를 들어 시스템 사용자의 경우 실제로 로그인 할 수 있음을 의미하지는 않습니다 ). 모든 테스트에서 사용자 이름 과 일치 합니다. ~lp
~string
string
~foo
사용자의 홈 디렉토리입니다foo
. 사용자를 지정하지 않으면 현재 사용자가 기본값입니다.