Vous pouvez utiliser read
avec un délimiteur défini sur :
while read -d ':' p; do
echo "$p"
done <<< "$PATH:"
Le moyen le plus simple est probablement de changer IFS
à deux-points et laissez le mot fractionner le faire :
IFS=:
for p in $PATH ; do
echo "$p"
done
Mais cela pourrait déclencher le remplacement du nom de fichier, dans le cas étrange où votre PATH
contenait des caractères comme *?[]
. Vous devez utiliser set -f
pour éviter cela.
En changeant IFS
pourrait être considérée comme problématique de toute façon, car elle affecte le reste du script. Donc, dans Bash, nous pourrions simplement diviser les chemins vers un tableau avec read -a
, cela n'a pas non plus de problème avec les caractères glob :
IFS=: read -a paths <<< "$PATH"
for p in "${paths[@]}" ; do
echo "$p"
done
avec écho :
echo "${PATH//:/$'\n'}"
sed :
sed 's/:/\n/g' <<< "$PATH"
tr :
tr ':' '\n' <<< "$PATH"
Python :
python -c "import os; print os.environ['PATH'].replace(':', '\n')"
pour une utilisation itérative pour :
for i in ${PATH//:/ }; do echo $i; done