$PATH vs. $Pfad

Sep 06 2020

Ich kann mich nicht erinnern warum, aber vor langer Zeit stellte ich fest, dass ich aus irgendeinem Grund beide Variablen setzen musste. Es verursachte keine Probleme in Bash, aber jetzt in Zsh, wenn ich es sage

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

(das gleiche, was ich in .bashrc verwendet habe) Bei meiner Initialisierung bekomme ich

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

Was bedeuten sie mit "Typ" und wofür wird $ path verwendet?

Antworten

8 grg Sep 06 2020 at 04:09

Der Fehler, der 'Typ' erwähnt, bezieht sich auf den Datentyp der Variablen, z. B. Zeichenfolge oder Array.

$PATHist eine Zeichenfolge, $pathist ein Array. Sie können einer Variablen, die so eingegeben wurde, dass sie ein Array enthält, keine Zeichenfolge zuweisen, sei es nach Variablen oder nach Literalen, da die Typen nicht übereinstimmen.

Was den Unterschied zwischen den beiden Variablen ausmacht: Sie sollen dieselbe Ordnerliste darstellen, jedoch in unterschiedlichen Formaten. $PATHEnthalten /path/to/one:/path/to/twowürde bedeuten, dass $pathdas erste /path/to/oneund das zweite Element ist /path/to/two.

Sie sollten die beiden Variablen nicht verwalten müssen (und das Zuweisen einer zur anderen funktioniert nicht, da die Typen nicht übereinstimmen) - die Shell sollte dies für Sie erledigen. Einfach an die $PATHZeichenfolge anhängen und der Pfad, den Sie hinzufügen, sollte als Element von vorhanden sein $path.

Dies gilt nur in zsh, geerbt von *csh. Sie können die 'Bindung' zwischen den beiden Variablen mit sehen typeset -p PATH.

$path ein Array zu sein ist wirklich praktisch:

  • Das Anhängen und Ändern des Pfads kann mit Array-Operationen wie Anhängen anstelle von Zeichenfolgenmanipulation erfolgen (das Teilen und Verbinden erfordert, wenn irgendwo in der Mitte bearbeitet wird).

  • Das Durchlaufen ist einfach for i ($path) { … }ohne die Einstellung des richtigen geteilten Zeichens zu erledigen.

3 fd0 Sep 06 2020 at 04:04

PATH ist ein skalarer Wert - eine fortlaufende Folge von Suchpfaden, die durch Doppelpunkte getrennt sind, und path ist ein Array von Suchpfaden. zshsynchronisiert sowohl Pfad als auch PFAD. Sie müssen dies nicht tun.