답변:
~
Zanna의 답변에 설명 된대로 물결표 가 인용 되어 오류 메시지가 생성 됩니다. 를 사용 ~
하려면 스크립트의 관련 부분이 다음과 같아야합니다.
BIN_DIR=~/bin/
대한 경우 어떤 이유로 당신이 문자열을 인용하려는 경우에는 환경 변수를 사용할 수 있습니다 $HOME
:
BIN_DIR="$HOME/bin/"
제 생각에는 두 번째 접근 방식이 더 좋습니다.
$HOME
스크립트에서 사용 하는 것이 좋습니다.
$HOME
? 당신이 한 유일한 설명은 "더 적은주의를 기울여야하기 때문에 더 좋은 생각입니다"라고 말하는 것입니다. 나는 그것이 무엇을 의미하는지 전혀 모른다. 편집에서 설명 할 수 있습니까? 그것 없이는, 당신의 대답을 뒷받침하는 것은 아무것도 없으므로, 반드시 그것에 속합니다. 틸드 확장은 POSIX에 의해 요구되고있다 해주기 동안 꽤 및 스크립트의 hashbang 라인은 #!/bin/bash
내가 휴대 성이 이유없는 생각 때문에.
~
인용되어 있기 때문에 작동하지 않습니다 . 큰 따옴표 "
는 물결표 확장을 억제 합니다 . 리터럴 이름을 가진 디렉토리가 없습니다 ~/bin
. man bash
(강조 광산)에 설명 된대로 :
물결 확장
단어가 인용되지 않은 물결표 문자 (`~ ')로 시작하는 경우 , 첫 번째 인용되지 않은 슬래시 (또는 인용되지 않은 슬래시가없는 경우 모든 문자) 앞에 오는 모든 문자는 물결표 접두어로 간주됩니다. 물결표 접두어의 문자가 인용되지 않으면 물결표 뒤에 물결표 접두어의 문자는 가능한 로그인 이름으로 처리됩니다. 이 로그인 이름이 널 문자열 인 경우 물결표가 쉘 매개 변수 HOME의 값으로 대체됩니다. HOME이 설정되어 있지 않으면 쉘을 실행하는 사용자의 홈 디렉토리가 대신 사용됩니다. 그렇지 않으면 물결표 접두어가 지정된 로그인 이름과 연관된 홈 디렉토리로 바뀝니다.
~
경로 ~/bin
에서 쉘이 확장을 수행하게하는 유일한 문자 이므로 quotes를 제거 할 수 있으며 , 이 경우 확장을 원합니다. 쉘은 수행하지 않습니다 , 틸드 확장의 결과에 더 확장을 배쉬 4 적어도 우분투의 현재 또는 원격으로 최근 출시되는 이 . 따라서 홈 디렉토리에 공백과 같은 특이한 문자가 포함되어 있어도 괜찮습니다.
또는 당신이 사용할 수있는 $HOME
대신 들 ~
때문에, 매개 변수 확장은 큰 따옴표로 억제되지 않은 경우에만로, 작은 따옴표 . 큰 따옴표 는 확장 된 값 자체가 추가 확장에 종속되지 않도록하므로 단어 분할 또는 파일 이름 확장 이 발생하지 않습니다. 그래서 $HOME
당신이 따옴표를 유지 너무 오래로, 심지어 너무 이상하게라는 이름의 홈 디렉토리와 함께 작동합니다.
cd '~'
입니다 -bash: cd: ~: No such file or directory
.
~
매개 변수 확장의 일부가 아닙니다.