$PATH vs. $통로

Sep 06 2020

이유는 기억 나지 않지만 오래 전에 어떤 이유로이 두 변수를 모두 설정해야한다는 것을 알았습니다. bash에서는 문제가 없었지만 이제 zsh에서는

export PATH=~/bin:/opt/local/bin:/opt/local/sbin:$PATH export path=$PATH

(.bashrc에서 사용한 것과 동일) 초기화에서

/Users/…/.zshenv:export:7: path: inconsistent type for assignment

"유형"은 무엇을 의미하며 $ path는 무엇에 사용됩니까?

답변

8 grg Sep 06 2020 at 04:09

'유형'을 언급하는 오류는 문자열 또는 배열과 같은 변수의 데이터 유형을 나타냅니다.

$PATH문자열이고 $path배열입니다. 유형이 일치하지 않기 때문에 배열을 포함하도록 유형이 지정된 변수에는 변수 또는 리터럴로 문자열을 할당 할 수 없습니다.

두 변수의 차이점은 동일한 폴더 목록을 나타내지 만 형식은 다릅니다. $PATH포함 /path/to/one:/path/to/two$path의 첫 번째 요소는 /path/to/one이고 두 번째 요소는 입니다 /path/to/two.

두 변수를 관리 할 필요가 없습니다 (유형이 일치하지 않으므로 하나를 다른 변수에 할당하는 것은 작동하지 않습니다). 쉘이이를 처리해야합니다. 단순히 $PATH문자열에 추가하면 추가 한 경로가의 요소로 존재해야합니다 $path.

에서만 적용되며 zsh에서 상속됩니다 *csh. 를 사용하여 두 변수 간의 '결합'을 볼 수 있습니다 typeset -p PATH.

$path 배열이되는 것은 정말 편리합니다.

  • 경로 추가 및 변경은 문자열 조작보다는 추가와 같은 배열 작업으로 수행 할 수 있습니다 (중간 어딘가에서 편집하는 경우 분할 및 결합 필요).

  • 루프 스루는 for i ($path) { … }오른쪽 분할 문자의 설정을 처리 할 필요가 없습니다.

3 fd0 Sep 06 2020 at 04:04

PATH는 스칼라 값입니다. 콜론으로 구분 된 연속적인 검색 경로 문자열이고 path는 검색 경로의 배열입니다. zsh경로와 PATH를 모두 동기화합니다. 그렇게 할 필요가 없습니다.