나는 최근 내 cygwin 프로필에서 더 정확하게 다음과 같은 내용을 발견했습니다.
/usr/local/bin:/usr/bin${PATH:+:${PATH}}
무슨 뜻이에요? 왜 $PATH만 사용하면 안 되나요? "$PATH가 존재하는 경우 추가:$PATH"입니까? 내 의도는 순서를 바꾸고 Windows 경로 뒤에 cygwin 경로를 넣는 것입니다. 예전엔 그랬겠지
$PATH:/usr/local/bin:/usr/bin
그러나 이것이 나를 혼란스럽게 한다. 아마도 내가 해야 할 것 같아
PATH="${PATH:+${PATH}:}/usr/local/bin:/usr/bin"
$PATH 끝에 다음을 추가합니다: ?
답변1
이건 :+
형태야매개변수 확장:
${매개변수:+[단어]}: 대체 값을 사용합니다.
인수가 설정되지 않았거나 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
.
답변2
당신 말이 맞습니다. "$PATH가 존재하고 비어 있지 않으면 다음을 추가하십시오:$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"
답변3
비교도 유용해요선택하다그리고기본매개변수 확장.
:-
그것을 사용 ${}
하면기본다음과 같은 값:
${a:-xxx} returns "xxx" if a is not defined.
:+
내부를 사용 ${}
하면선택하다다음과 같은 값:
${a:+xxx} returns "xxx" if a is defined.
따라서 이 경우 기본적으로 정의된 값을 사용하는 것이 아니라 대체 값이 반환된다는 ${PATH:+${PATH}:}
의미 입니다 .PATH
PATH
PATH: