Beliebt

Was ist der Unterschied zwischen zshs $ path und $ PATH? - zsh

Als ich beginne, von bash nach zsh zu migrieren, stelle ich viele Unterschiede fest. Einer davon ist der folgende:

envy% echo $path
/usr/local/bin /usr/bin /bin /usr/sbin /sbin /opt/X11/bin

envy% echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin

Warum spiegeln sich diese au√üer den Leerzeichen und Doppelpunkten und wenn Sie sie √§ndern? Was ist das Verst√§ndnis f√ľr zsh Umgebungsvariablen, die ich hier nicht habe?

Antworten:

0 f√ľr Antwort ‚ĄĖ 1

$PATH ist eine skalare Variable, während $path ist ein Array.

Beachten Sie, dass im ersten Fall die Verzeichnisse durch Doppelpunkte in der Leiste begrenzt sind $PATH String selbst; Im zweiten Fall wird das Array automatisch erweitert und durch Leerzeichen getrennt:

$ print $PATH
/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
$print $path
/bin /usr/bin /usr/local/bin /usr/X11R6/bin

Beide Varianten werden von automatisch synchron gehalten zsh. Also, was ist der Vorteil der Verwendung eines Arrays?

  • Letzteres k√∂nnen Sie √ľber deklarieren typeset -U path um "nur das erste Vorkommen jedes duplizierten Wertes zu behalten" (von man zshbuiltins). Das hei√üt, dies h√§lt Ihren Weg sauber, auch wenn Sie sukzessive Ihre Quelle ~/.zshrc (weil Sie es ge√§ndert haben oder was auch immer) und √ľberladen Sie es nicht immer wieder mit denselben Werten.
  • Sie k√∂nnen verwenden path+=(/new/path) um Ihrem PATH ein neues Verzeichnis hinzuzuf√ľgen. Um ein Element zu entfernen, m√ľssen Sie einige Tricks anwenden, siehe z. https://stackoverflow.com/q/3435355/2037712 oder http://www.zsh.org/mla/users//2005/msg01132.html
  • √úber k√∂nnen Sie die Elemente im PATH ganz einfach durchlaufen for i ($path) { print $i # or do something else }

Zum Schluss hier ein Auszug aus meiner Konfiguration mit dem Versuch, meinen Suchpfad aufgeräumt zu halten:

typeset -U path
path=(/new/path1
/new/path2
$path)
export PATH

Quelle: Meine eigene Antworten zu einer anderen Frage.