Puedes usar read
con delimitador establecido como :
while read -d ':' p; do
echo "$p"
done <<< "$PATH:"
La forma más sencilla es probablemente cambiar IFS
a dos puntos y deja que la palabra dividir lo haga:
IFS=:
for p in $PATH ; do
echo "$p"
done
Pero eso podría desencadenar la acumulación de nombres de archivo, en el extraño caso de que su PATH
contenía caracteres como *?[]
. Necesitarías usar set -f
para evitar eso.
Aunque cambiando IFS
podría considerarse problemático de todos modos, ya que afecta al resto del script. Entonces, en Bash, podríamos simplemente dividir las rutas a una matriz con read -a
, esto tampoco tiene problema con los caracteres globales:
IFS=: read -a paths <<< "$PATH"
for p in "${paths[@]}" ; do
echo "$p"
done
con eco:
echo "${PATH//:/$'\n'}"
sed:
sed 's/:/\n/g' <<< "$PATH"
tr:
tr ':' '\n' <<< "$PATH"
pitón:
python -c "import os; print os.environ['PATH'].replace(':', '\n')"
para iterar uso para:
for i in ${PATH//:/ }; do echo $i; done