7 votes

$PATH vs. $path

Je ne sais plus pourquoi, mais il y a longtemps, j'ai découvert que, pour une raison ou une autre, je devais définir ces deux variables. Cela ne posait aucun problème dans bash, mais maintenant dans zsh, quand je mets

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

(la même chose que j'ai utilisée dans .bashrc) dans mon initialisation, j'obtiens

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

Qu'entend-on par "type" et à quoi sert $path ?

8voto

grg Points 181593

La mention d'erreur "type" fait référence au type de données de la variable, comme une chaîne ou un tableau.

$PATH est une chaîne de caractères, $path est un tableau. Vous ne pouvez pas assigner une chaîne de caractères, que ce soit par variable ou par littéral, à une variable typée pour contenir un tableau, puisque les types ne correspondent pas.

En ce qui concerne la différence entre les deux variables, elles sont censées représenter la même liste de dossiers, mais dans des formats différents. $PATH contenant /path/to/one:/path/to/two signifierait que $path est le premier élément de /path/to/one et le second est /path/to/two .

Vous ne devriez pas avoir à gérer les deux variables (et l'affectation de l'une à l'autre ne fonctionnera pas puisque les types ne correspondent pas) - l'interpréteur de commandes devrait s'en charger pour vous. Il suffit d'ajouter à la variable $PATH et le chemin que vous ajoutez doit exister en tant qu'élément de $path .

Cela ne s'applique que dans les cas suivants zsh , hérité de *csh . Vous pouvez voir la "liaison" entre les deux variables avec typeset -p PATH .

$path étant un tableau, c'est vraiment pratique :

  • l'ajout et la modification du chemin peuvent être effectués à l'aide d'opérations de type tableau, comme append, plutôt que par la manipulation de chaînes de caractères (ce qui nécessite une division et une jonction dans le cas d'une modification quelque part au milieu).

  • Le bouclage est juste for i ($path) { … } sans qu'il soit nécessaire de définir le bon caractère de séparation.

3voto

Michael Zhou Points 167

PATH est une valeur scalaire - une chaîne continue de chemins de recherche séparés par des deux points et path est un tableau de chemins de recherche. zsh synchronisera à la fois path et PATH. Il n'est pas nécessaire de le faire.

-2voto

nicolas Points 198

Voici un bon conseil

print -l $path

comme le type de cette variable est un tableau, d'autres opérations sont possibles

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X