GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Durchlaufen der Elemente einer Pfadvariablen in Bash

Sie können die Mustersubstitutionsparametererweiterung von Bash verwenden, um Ihre Schleifenvariable zu füllen. Zum Beispiel:

MANPATH=/usr/lib:/usr/sfw/lib:/usr/info

# Replace colons with spaces to create list.
for path in ${MANPATH//:/ }; do
    echo "$path"
done

Hinweis:Schließen Sie die Substitutionserweiterung nicht in Anführungszeichen ein. Sie möchten, dass die erweiterten Werte von MANPATH von der for-Schleife als separate Wörter und nicht als einzelne Zeichenfolge interpretiert werden.


Sie können das interne Feldtrennzeichen setzen:

( IFS=:
  for p in $MANPATH; do
      echo "$p"
  done
)

Ich habe eine Subshell verwendet, sodass sich die Änderung in IFS nicht in meiner aktuellen Shell widerspiegelt.


Der kanonische Weg, dies in Bash zu tun, ist die Verwendung von read entsprechend eingebaut:

IFS=: read -r -d '' -a path_array < <(printf '%s:\0' "$MANPATH")

Dies ist die einzige robuste Lösung:macht genau das, was Sie wollen:Teilen Sie den String am Trennzeichen : und achten Sie auf Leerzeichen, Zeilenumbrüche und Glob-Zeichen wie * , [ ] usw. (im Gegensatz zu den anderen Antworten:Sie sind alle kaputt).

Nach diesem Befehl haben Sie ein Array path_array , und Sie können darauf eine Schleife ausführen:

for p in "${path_array[@]}"; do
    printf '%s\n' "$p"
done

Linux
  1. Bash-Scripting(I)

  2. Die Bash‘?

  3. Ist es möglich, dass die Bash-Vervollständigung die Alternativen durchläuft?

  4. Durchlaufen des Inhalts einer Datei in Bash

  5. Hinzufügen eines neuen Eintrags zur PATH-Variablen in ZSH

Bash-Exportvariable

Alias ​​mit Variable in Bash

Wie kann ich die Anzahl der Zeichen in einer Bash-Variablen zählen?

Variablenbereich für Bash-Shell-Skripte und Funktionen im Skript

Auswirkungen auf die Sicherheit bei der Verwendung relativer Pfade in der PATH-Umgebungsvariable?

Wie kürze ich den aktuellen Verzeichnispfad, der auf dem Terminal angezeigt wird?