최근에 cygwin 프로파일에서 다음을 더 정확하게 알았습니다.
/usr/local/bin:/usr/bin${PATH:+:${PATH}}
무슨 뜻이에요? 왜 단지 $ PATH가 아닌가? 이것이 ‘$ PATH가 존재하면 : $ PATH’를 추가합니까? 내 목적은 순서를 바꾸고 cygwin 경로를 Windows 경로 뒤에 넣는 것입니다. 과거에는
$PATH:/usr/local/bin:/usr/bin
그러나 이것은 나를 혼란스럽게합니다. 어쩌면 내가해야 할 것
PATH="${PATH:+${PATH}:}/usr/local/bin:/usr/bin"
$ PATH 끝에 :를 추가하려면?
답변
은 :+
의 형태 파라미터 확장 :
$ {parameter : + [word]} : 대체 값을 사용하십시오.
매개 변수가 설정되지 않거나 null이면 null이 대체됩니다. 그렇지 않으면 단어의 확장 (또는 단어가 생략 된 경우 빈 문자열)이 대체됩니다.
즉, 변수 $var
가 정의 echo ${var:+foo}
되면 인쇄 foo
하고 그렇지 않은 경우 빈 문자열을 인쇄합니다.
두 번째 :
는 특별한 것이 아닙니다. 의 디렉토리 목록에서 구분 기호로 사용되는 문자입니다 $PATH
. 따라서 PATH="/usr/local/bin:/usr/bin${PATH:+:${PATH}}"
짧은 글쓰기 방법입니다.
if [ -z "$PATH" ]; then
PATH=/usr/local/bin:/usr/bin
else
PATH=/usr/local/bin:/usr/bin:$PATH
fi
설정되지 않은 :
경우 추가를 피하는 것이 현명한 방법입니다 $PATH
. 예를 들면 다음과 같습니다.
$ PATH="/usr/bin"
$ PATH="/new/dir:$PATH" ## Add a directory
$ echo "$PATH"
/new/dir:/usr/bin
그러나 PATH
설정되지 않은 경우 :
$ unset PATH
$ PATH="/new/dir:$PATH"
$ echo "$PATH"
/new/dir:
A :
자체는 현재 디렉토리를에 추가합니다 $PATH
. 사용 PATH="/new/dir${PATH:+:$PATH}"
하면 이것을 피할 수 있습니다. 따라서 PATH="${PATH:+${PATH}:}/usr/local/bin:/usr/bin"
원하는 경우 사용 하거나 원하는 PATH="$PATH:/usr/local/bin:/usr/bin"
경우 사용할 수 있습니다 . 유일한 차이점은 전자가 추가 :
를 추가하여 현재 디렉토리를에 추가 할 수 있다는 것 $PATH
입니다.
답변
맞습니다. ‘$ PATH가 있고 null이 아닌 경우’를 추가 한 후 : $ PATH를 추가하십시오.
$ PATH가 정의되지 않은 경우 선행 (또는 후행) 콜론을 추가하지 않기 때문에 $ PATH가 있는지 확인해야합니다. :/usr/local/bin:/usr/bin
또는 /usr/local/bin:/usr/bin:
, 또는 에서 와 같이 경로에서 길이가 0 인 (널) 디렉토리 이름 은 현재 디렉토리를 검색/usr/local/bin::/usr/bin
함을 의미 합니다 .
에서 발췌 man bash
:
PATH ...
A zero-length (null) directory name in the value of PATH indicates
the current directory. A null directory name may appear as two
adjacent colons, or as an initial or trailing colon.
...
아마 당신이하고 싶은 일이 아닙니다.
다음 두 줄은 같은 일을합니다.
PATH=":/bin" # search current directory, then /bin
PATH=".:/bin"