$PATH vs. $ścieżka

Sep 06 2020

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

8 grg Sep 06 2020 at 04:09

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.

3 fd0 Sep 06 2020 at 04:04

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ć.