ProgramingTip

$ HOME과 '~'(물결표)의 차이점은 무엇입니까?

bestdevel 2020. 12. 4. 19:51
반응형

$ 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받는 사람 확장 HOMEusername.

$ 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

반응형