GNU/Linux >> Znalost Linux >  >> Linux

Procházení prvků proměnné cesty v Bash

K naplnění proměnné smyčky můžete použít Bashovo rozšíření parametru substituce vzoru. Například:

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

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

Poznámka:Neuzavírejte substituční rozšíření do uvozovek. Chcete, aby byly rozšířené hodnoty z MANPATH interpretovány for-loop jako samostatná slova, nikoli jako jeden řetězec.


Můžete nastavit Interní oddělovač polí:

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

Použil jsem subshell, takže změna v IFS se neodráží v mém aktuálním shellu.


Kanonický způsob, jak toho dosáhnout v Bash, je použít read správně zabudované:

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

Toto je jediné robustní řešení:udělá přesně to, co chcete:rozdělte řetězec na oddělovači : a buďte v bezpečí s ohledem na mezery, nové řádky a znaky glob, jako je * , [ ] , atd. (na rozdíl od ostatních odpovědí:všechny jsou rozbité).

Po tomto příkazu budete mít pole path_array , a můžete na něj zacyklit:

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

Linux
  1. Jak změnit proměnnou PATH v Linuxu

  2. Alias ​​s proměnnou v bash

  3. Výstupní kód přiřazení proměnné k substituci příkazu v Bash

  1. Přizpůsobení prostředí Bash

  2. Bash skriptování (I)

  3. bash - shoda proměnné bez ohledu na velikost písmen

  1. Procházení souborů s mezerami v názvech?

  2. The Bash ‘?

  3. Úplný pohled na to, kde je v Bash nastavena proměnná cesty?