$PATH vs. $ścieżka
Nie pamiętam dlaczego, ale dawno temu stwierdziłem, że z jakiegoś powodu muszę ustawić obie te zmienne. Nie spowodowało to żadnych problemów w bashu, ale teraz w zsh, kiedy wstawiłem
export PATH=~/bin:/opt/local/bin:/opt/local/sbin:$PATH export path=$PATH
(to samo, czego użyłem w .bashrc) w mojej inicjalizacji, otrzymuję
/Users/…/.zshenv:export:7: path: inconsistent type for assignment
Co rozumieją przez „typ” i do czego służy $ path?
Odpowiedzi
Błąd wymieniający „typ” odnosi się do typu danych zmiennej, na przykład łańcucha lub tablicy.
$PATHjest łańcuchem, $pathjest tablicą. Nie można przypisać ciągu, czy to za pomocą zmiennej, czy literału, do zmiennej, która ma zawierać tablicę, ponieważ typy nie są zgodne.
A jeśli chodzi o różnicę między tymi dwiema zmiennymi: mają one reprezentować tę samą listę folderów, ale w różnych formatach. $PATHzawierający /path/to/one:/path/to/twooznaczałoby, że $pathpierwszy element to, /path/to/onea drugi to /path/to/two.
Nie powinieneś potrzebować zarządzać dwiema zmiennymi (a przypisanie jednej do drugiej nie zadziała, ponieważ typy się nie zgadzają) - powłoka powinna obsłużyć to za Ciebie. Po prostu dołącz do $PATHciągu, a dodana ścieżka powinna istnieć jako element $path.
Dotyczy to tylko zsh, dziedziczone z *csh. Możesz zobaczyć „powiązanie” między dwiema zmiennymi za pomocą typeset -p PATH.
$path bycie tablicą jest naprawdę wygodne:
dołączanie i zmienianie ścieżki można wykonać za pomocą operacji tablicowych, takich jak dołączanie zamiast manipulacji na ciągach (wymagające dzielenia i łączenia w przypadku edycji gdzieś pośrodku).
zapętlanie jest po prostu
for i ($path) { … }bez konieczności ustawiania odpowiedniego znaku podziału.
PATH to wartość skalarna - ciągły ciąg ścieżek wyszukiwania oddzielonych dwukropkami, a ścieżka to tablica ścieżek wyszukiwania. zshzsynchronizuje ścieżkę i PATH. Nie musisz tego robić.