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