In FreeBSD 12, das die zsh
Shell verwendet, habe ich diesen Unterschied bemerkt, als ich $path
(Kleinbuchstaben) im Vergleich zu $PATH
(Großbuchstaben) sah.
echo $path
/ sbin / bin / usr / sbin / usr / bin / usr / lokal / sbin / usr / lokal / bin / usr / home / freebsd / bin
echo $PATH
/ sbin: / bin: / usr / sbin: / usr / bin: / usr / local / sbin: / usr / local / bin: / usr / home / freebsd / bin
Eine Ausgabe wird durch das SPACE-Zeichen, die andere durch das COLON-Zeichen begrenzt.
➥ Woher kommt der Unterschied?
Sind das zwei verschiedene, separate Variablen? Oder löst die Klein- / Großschreibung einen Trick oder eine Bedeutung aus, von der ich nichts weiß?
Ist das ein zsh
Feature? Oder eine Funktion von FreeBSD?
path
innenzsh
wird keine Aktualisierungpath
envvar:path=junk zsh -c 'echo $path; path=garbage; /usr/bin/printenv path'
.for path in "$dir"/*
reflexiv sicher-to-Code schreiben.Antworten:
Das ist eine Eigenschaft von
zsh
geerbt voncsh
/tcsh
.Die
$path
Array- Variable ist an die$PATH
skalare (String-) Variable gebunden . Jede Änderung an einem spiegelt sich im anderen wider.In
zsh
(im Gegensatz zu(t)csh
) können Sie weitere Variablen$PATH
mit bindentypeset -T
. Es ist üblich, aber nicht obligatorisch, für den durch Doppelpunkte getrennten Skalar einen Namen in Großbuchstaben und für das Array denselben Namen in Kleinbuchstaben zu verwenden. Während Doppelpunkt das Standardtrennzeichen ist, können andere Trennzeichen verwendet werden (zum Beispiel newline, um eine mehrzeilige Zeichenfolge mit einem Array zu verknüpfen, oder ein Komma, um eine CSV-Zeile mit einem Array zu verknüpfen).In den letzten Versionen
zsh
,typeset -p PATH
odertypeset -p path
zeigt die Verbindung zwischen den beiden Variablen:Dies ist insofern nützlich, als es einfacher ist, entfernte Komponenten hinzuzufügen oder eine Schleife über diese zu erstellen.
Wenn Sie a verwenden
typeset -U path
, um die Elemente eindeutig zu machen, bleibt die$PATH
Variable auch sauber (etwas Ähnliches kann mit erreichttcsh
werdenset -f
).quelle