GNU/Linux >> Tutoriels Linux >  >> Linux

Boucle à travers les éléments d'une variable de chemin dans Bash

Vous pouvez utiliser l'expansion des paramètres de substitution de modèle de Bash pour remplir votre variable de boucle. Par exemple :

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

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

Remarque :Ne placez pas le développement de substitution entre guillemets. Vous voulez que les valeurs développées de MANPATH soient interprétées par la boucle for comme des mots séparés, plutôt que comme une chaîne unique.


Vous pouvez définir le séparateur de champs interne :

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

J'ai utilisé un sous-shell pour que le changement dans IFS ne soit pas reflété dans mon shell actuel.


La manière canonique de le faire, dans Bash, est d'utiliser le read intégré de manière appropriée :

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

C'est la seule solution robuste :fera exactement ce que vous voulez :diviser la chaîne sur le délimiteur : et soyez prudent en ce qui concerne les espaces, les nouvelles lignes et les caractères globaux comme * , [ ] , etc. (contrairement aux autres réponses :elles sont toutes cassées).

Après cette commande, vous aurez un tableau path_array , et vous pouvez boucler dessus :

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

Linux
  1. Personnalisation du shell Bash

  2. Script bash (I)

  3. Boucler à travers des fichiers avec des espaces dans les noms ? ?

  4. La fête ?

  5. Vue complète de l'endroit où la variable de chemin est définie dans Bash ?

Variable d'exportation bash

Alias ​​avec variable dans bash

Comment puis-je compter le nombre de caractères dans une variable Bash

Code de sortie de l'affectation de variable à la substitution de commande dans Bash

Portée variable pour les scripts shell bash et les fonctions dans le script

bash - correspondance insensible à la casse de la variable