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.