$ HOME과 '~'(물결표)의 차이점은 무엇입니까?
나는 항상 그렇게 생각 $HOME
하고 ~
정확히 똑같아 서 서로 바꿔서 사용할 수 있습니다. 오늘, memcached에 대한 기술 바인딩 인 pylibmc를 공유 서버에 설치하려고 할 때를 사용하면 ~
오류가 발생했지만 $HOME
. 이유를 추론하고 싶습니다.
libmemcached를 위한 요구 사항입니다 pylibmc . 나는 한 libmemcached 내가 서버에서 뿌리가 없기 때문에 홈 디렉토리 아래에 설치합니다. 결과적으로 pylibmc 를 설치하려면 설치 펼쳐가 libmemcached 를 찾을 위치를 알고 있는지 확인해야 합니다 .
를 실행 python setup.py install --with-libmemcached=~
하면 설치 펼쳐집니다.
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall \ -Wstrict-prototypes -fPIC -DUSE_ZLIB -I ~ / 포함 \ -I / usr / local / include / python2.7 -c _pylibmcmodule.c \ -o 빌드 / temp.linux-i686-2.7 / _pylibmcmodule.o -fno-strict-aliasing
libmemcached 를 제공합니다 .
로 변경 --with-libmemcached=$HOME
하면 펼쳐가 실행됩니다.
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall \ -Wstrict-prototypes -fPIC -DUSE_ZLIB -I / home / waterbotte / include \ -I / usr / local / include / python2.7 -c _pylibmcmodule.c \ -o 빌드 / temp.linux-i686-2.7 / _pylibmcmodule.o -fno-strict-aliasing
아무 문제없이. 문제는 물결표가 해결되지 않을 것입니다. 그런데 왜?
쉘은 ~
사용자의 홈 디렉토리 ( update : 또는 다른 사용자의 홈 디렉토리로 대체 됩니다. ~
다음에 a 이외의 /
문자가 오는 경우), 그러나 단어의 첫 문자 인 경우에만 가능합니다.
--with-libmemcached=~
~
처음 에는 문장은 그대로 포함되어 있습니다.
물결표는 bash, csh, zsh 단일 쉘 확장의 일부 입니다 . $HOME
변수 특정 특정 쉘의 독립을 사용할 수 있습니다.
~
단어의 첫 문자이고 따옴표가없는 경우에만 확장됩니다.
$ echo "~"
~
$ echo foo~
foo~
$ echo ~
/home/guest
$ echo ~/foo
/home/guest/foo
~username
받는 사람 확장 HOME
의 username
.
$ echo ~root
/root
$ echo ~invaliduser
~invaliduser
파일 이름을 인용 비용 $HOME
접미사를 사용 하거나 인용 해야합니다.
$ echo "$HOME/foo bar"
/home/guest/foo bar
$ echo ~/"foo bar"
/home/guest/foo bar
$ echo ~root/"foo bar"
/root/foo bar
"POSIX 물결표 확장" 에서 다음 사항에 유의하십시오.
물결표 확장으로 인한 경로 이름은 필드 분할 및 경로 이름 확장에 의해 변경되는 것을 방지하기 위해 인용 된 것처럼 처리됩니다.
주요 차이점은 다음과 가변합니다.
cd /tmp
ls "$HOME" #works
ls "~" #nope
따라서 쉘은 몇 가지 상황에서만 ~를 확장합니다. 귀하의 경우 Python 스크립트는 확장 된 값이 아닌 스크립트 내부에 ~를 얻었습니다.
다음 스크립트를 실행하십시오.
#!/bin/bash
sudo -H -u root bash<<EOF
echo $HOME
echo ~
EOF
산출:
/home/my_current_user
/root
당신이 볼 수 ~
도착 확장 (가 운영 대상 쉘, 나중에 root
동안) $HOME
도착 대체 소스 쉘 (운영하는 my_current_user
)
참고 URL : https://stackoverflow.com/questions/11587343/difference-between-home-and-tilde
'ProgramingTip' 카테고리의 다른 글
Spring MVC : 고급 페이지에 대한 기본 컨트롤러를 만드는 방법은 무엇입니까? (0) | 2020.12.04 |
---|---|
jquery의 데이터 속성에서 부울 데이터 검색 (0) | 2020.12.04 |
dis.dis의 출력을 어떻게 이해해야합니까? (0) | 2020.12.04 |
지연된 작업 순서를 어떻게 볼 수 있습니까? (0) | 2020.12.04 |
FileInputStream을 사용하는 것보다 BufferedInputStream을 사용하여 파일을 바이트 단위로 빠르게 읽는 이유는 무엇입니까? (0) | 2020.12.04 |