Puoi usare read
con delimitatore impostato come :
while read -d ':' p; do
echo "$p"
done <<< "$PATH:"
Il modo più semplice è probabilmente cambiare IFS
ai due punti e lascia che la parola splitting lo faccia:
IFS=:
for p in $PATH ; do
echo "$p"
done
Ma questo potrebbe innescare il globbing del nome del file, nel caso strano che il tuo PATH
conteneva caratteri come *?[]
. Dovresti usare set -f
per evitarlo.
Pur cambiando IFS
potrebbe comunque essere considerato problematico, poiché influisce sul resto dello script. Quindi in Bash, potremmo semplicemente dividere i percorsi in un array con read -a
, anche questo non ha problemi con i caratteri glob:
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"
pitone:
python -c "import os; print os.environ['PATH'].replace(':', '\n')"
per uso iterato for:
for i in ${PATH//:/ }; do echo $i; done