$HOME
그리고 ~
일반적으로 같은 일을 참조하십시오. 즉, "/ home / userName"의 일반적인 형식 인 "사용자 홈"디렉토리의 경로입니다.
언제라도 동일한 디렉토리를 참조하지 않습니까?
$HOME
그리고 ~
일반적으로 같은 일을 참조하십시오. 즉, "/ home / userName"의 일반적인 형식 인 "사용자 홈"디렉토리의 경로입니다.
언제라도 동일한 디렉토리를 참조하지 않습니까?
답변:
모두 $HOME
와 ~
동일한 폴더, 현재 사용자의 홈 폴더를 가리키고 있지만, 둘 다 매우 다른 것입니다.
$HOME
입니다 환경 변수 현재 사용자의 홈 폴더를 포함하도록 설정되어 있습니다.~
A는 쉘 확장 기호 , 즉 실제 명령이 수행되기 전에 처리되는 심볼 중 하나. ~
단독으로 $ HOME의 값으로 확장됩니다. ~nemo
user의 홈 디렉토리로 확장됩니다 nemo
. 쉘 확장 기호는 실제 명령을 빌드하기 위해 쉘이 처리 / 해석하는 문자 (또는 문자 쌍)입니다. 쉘 확장 기호의 다른 예는 *
파일 이름을 확장하는 데 사용됩니다.~
Windows에서는 $ HOME 또는 % APPDATA %로 확장됩니다. 정의되지 않은 경우 "암호 데이터베이스"에서 경로를 찾습니다 (일반적으로을 의미 /etc/passwd
하지만 LDAP 또는 기타 데이터 소스 일 수 있음). 약 20 년 전에 어떤 머신에서는 $ HOME이 설정되지 않았을 수도 있지만 어떤 ~
것으로 확장 될 수 있다는 경고를 받았을 수도 있습니다 .
~
이 확장은 $HOME
(동일 $HOMEPATH
하지) $APPDATA
. 그리고 cmd.exe에서는 ~
확장되지 않습니다.
HOME
은 쉘 변수가 아닌 환경 변수 (OS 개념, 예를 들어 또는로 설정 한 sh 쉘에서 )이며 쉘의 정의는 쉘에 전적으로 의존하지만 sh 쉘에서는 일반적으로 다른 쉘 과 함께 또는 다른 것으로 설정됩니다. 방법). export
declare -x
foo=value
set
~
정의상 단어의 시작 부분에서 시작해야하는 물결표 접두사 의 일부로 만 확장됩니다 . 또한 한 번 globbing 패턴의 일부 였으므로 ~
큰 따옴표 안에 작동하지 않습니다. 그래서, "~"
또는 a~b
의 리터럴 값 발생합니다 ~
보존된다.
단일 ~
(또는 ~
뒤에 /
)은 현재 사용자의 집으로 확장됩니다.
$ echo ~/.ssh
/home/user/.ssh
A는 ~
해당 사용자의 홈 폴더로 확장하는 사용자 이름 뒤에 :
$ echo ~root/.ssh
/root/.ssh
A는 ~
a로 다음 +
또는 -
및 옵션 수는 요소로 확장됩니다 디렉토리 스택 :
$ cd /etc
$ echo ~+0
/etc
$HOME
는 ~
변수의 구문 규칙을 따르는 single 과 같습니다. 예를 들어, 큰 따옴표로 확장하고 설정을 해제 할 수 있으며 문자열 조작 피연산자 를 적용 할 수 있습니다.
이것은 확장이 무엇인지에 달려 있습니다. bash에서는 ~
인용되지 않은 경우에도 파일 이름 확장 또는 단어 분할을 트리거하지 않고 홈 디렉토리를 얻는 편리한 방법입니다. 예를 들면 다음과 같습니다.
$ HOME='/*'
$ echo $HOME
/bin /boot /dev /etc /home /lib /lib64 /media /mnt /opt /proc /root /run /sbin /srv /sys /tmp /usr /var
$ echo ~
/*
또는:
$ HOME='/ a b'
$ printf "|%s|\n" $HOME ~
|/|
|a|
|b|
|/ a b|
따라서 어떤 이유로 든 따옴표로 씨름하는 경우 (이 경우 실제로 모든 것을 다시 생각하면 돼지를 씨름하는 것이 더 쉽습니다) ~
더 편리 할 수 있습니다.
한편, 파이썬, 예를 들어, ~
과 $HOME
에 의해 확장 될 필요가 다른 기능 . 다른 곳에서는 변수를 허용하고 와일드 카드 나 물결표 확장 (예 : ~/.pam_environment
변수 확장을위한 특수 구문이있는) 과 같은 다른 쉘 구문을 허용하지 않습니다 . 다른 곳에서는 물결표 확장을 예외 (예 : systemd ) 로 허용 하지만를 사용하는 대신 passwd 데이터베이스를 직접 쿼리하십시오 $HOME
.
$HOME
수 있지만 의 값은 (직접) 변경할 수 없다는 것입니다 ~
.
$HOME
및 ~
그들은 보통 기본적으로 수행 - - 같은 일을 참조하지 다음은 환경 변수에 의도적으로 할당 그들이 같은 일을 참조 할 수 있도록합니다. 이것은 좋은 데모이지만 불필요하게 혼란 스럽습니다.
물결표 확장은 BSD csh tcsh GNU bash 및 기타에서 발견되는 확장이므로 $ HOME /은 표준 POSIX.2 Bourne / bin / sh에서 작동 할 가능성이 높습니다.
busybox 또는 dash 또는 BSD sh에 이식 가능한 스크립트를 작성하려면 ~ /와 충돌하지 않도록 추가 문자에 투자하십시오. 특정 시스템에는 해당 파일이나 디렉토리가 없습니다.
또한 $ HOME /이 더 읽기 쉽습니다.
$HOME
거의 사용하지 않는 이유 일 것 ~
입니다. 내 자신은 아마 이것을 알고 있었다.
~
$ HOME은 아니지만 IS 의존 쉘.