GNU/Linux >> Linux Esercitazione >  >> Linux

Ciclo degli elementi di una variabile di percorso in Bash

È possibile utilizzare l'espansione del parametro di sostituzione del modello di Bash per popolare la variabile del ciclo. Ad esempio:

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

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

Nota:non racchiudere l'espansione di sostituzione tra virgolette. Vuoi che i valori espansi da MANPATH vengano interpretati dal ciclo for come parole separate, piuttosto che come una singola stringa.


Puoi impostare il separatore di campo interno:

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

Ho usato una subshell in modo che il cambiamento in IFS non si rifletta nella mia attuale shell.


Il modo canonico per farlo, in Bash, è usare read incorporato in modo appropriato:

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

Questa è l'unica soluzione robusta:farà esattamente quello che vuoi:dividi la stringa sul delimitatore : ed essere prudenti rispetto a spazi, newline e caratteri glob come * , [ ] , ecc. (a differenza delle altre risposte:sono tutte rotte).

Dopo questo comando, avrai un array path_array , e puoi eseguirne il loop:

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

Linux
  1. Script Bash(I)

  2. Scorrere i file con spazi nei nomi??

  3. Il Bash '?

  4. È possibile che il completamento di Bash scorra le alternative?

  5. Assegnare solo una parte di una stringa a una variabile in Bash?

Variabile di esportazione Bash

Visualizzazione completa di dove è impostata la variabile Path in Bash?

Ciclo del contenuto di un file in Bash

Aggiunta di una nuova voce alla variabile PATH in ZSH

Come posso contare il numero di caratteri in una variabile Bash

Qual è il significato di un doppio segno di dollaro in bash/Makefile?