Dans FreeBSD 12, en utilisant le zsh
shell, j'ai remarqué cette différence en regardant $path
(en minuscules) par rapport à $PATH
(en majuscules).
echo $path
/ sbin / bin / usr / sbin / usr / bin / usr / local / sbin / usr / local / bin / usr / home / freebsd / bin
echo $PATH
/ sbin: / bin: / usr / sbin: / usr / bin: / usr / local / sbin: / usr / local / bin: / usr / home / freebsd / bin
Une sortie est délimitée par le caractère ESPACE, l'autre par le caractère COLON.
➥ Pourquoi la différence?
Ces deux variables sont-elles différentes et distinctes? Ou est-ce que les minuscules / majuscules déclenchent une sorte d'astuce ou de sens que je ne connais pas?
Est-ce une zsh
fonctionnalité? Ou une fonctionnalité de FreeBSD?
path
intérieurzsh
ne mettre à jourpath
envvar:path=junk zsh -c 'echo $path; path=garbage; /usr/bin/printenv path'
.for path in "$dir"/*
code réflexif sûr à écrire.Réponses:
C'est une caractéristique
zsh
héritée decsh
/tcsh
.La variable
$path
tableau est liée à la variable$PATH
scalaire (chaîne). Toute modification de l'un se reflète dans l'autre.Dans
zsh
(contrairement à(t)csh
), vous pouvez lier d'autres variables à côté$PATH
detypeset -T
. Il est classique, mais pas obligatoire, d'utiliser un nom en majuscule pour le scalaire séparé par deux-points et le même nom en minuscule pour le tableau. Alors que deux-points est le séparateur par défaut, d'autres séparateurs peuvent être utilisés (par exemple, une nouvelle ligne pour lier une chaîne multiligne à un tableau ou une virgule pour lier une ligne csv à un tableau)Dans les versions récentes de
zsh
,typeset -p PATH
outypeset -p path
montre le lien entre les deux variables:C'est utile dans la mesure où il est plus facile d'ajouter des composants de suppression ou de les boucler.
Faire un
typeset -U path
pour rendre les éléments uniques permet également de garder la$PATH
variable propre (quelque chose de similaire peut être réalisétcsh
avecset -f
).la source