[niveau intermédiaire]
Difficile de trouver un titre correspondant à la problématique.
Il se trouve que lorsque vous tapez la commande suivante dans un shell, vous obtenez le résultat ci-dessous:
debian:~/tmp# ls
test1.txt test deux.txt test_trois.txt
debian:~/tmp# for i in $(find . -name « *.txt »); do echo $i; done
./test1.txt
./test_trois.txt
./test
deux.txt
test1.txt test deux.txt test_trois.txt
debian:~/tmp# for i in $(find . -name « *.txt »); do echo $i; done
./test1.txt
./test_trois.txt
./test
deux.txt
Comme on peut le constater, « test deux.txt » ayant un espace dans son nom, il est affiché sur deux lignes dans notre résultat au lieu d’une seule ligne.
Pour fixer ce problème, il suffit de modifier la variable IFS qui détermine le séparateur, puisque par défaut le séparateur va être un espace.
Pour se faire nous devons mettre notre commande dans un script :
#!/bin/bash
# on demande à ce que le séparateur soit sur le retour à la ligne
IFS=’
‘
for i in $(find . -name « *.txt »); do
echo $i;
done
# on demande à ce que le séparateur soit sur le retour à la ligne
IFS=’
‘
for i in $(find . -name « *.txt »); do
echo $i;
done
Le résultat de l’exécution de notre script :
debian:~/tmp# ./script.sh
./test1.txt
./test_trois.txt
./test deux.txt
./test1.txt
./test_trois.txt
./test deux.txt
Plus d’informations sur http://tldp.org/LDP/abs/html/internalvariables.html#IFS