Supposons que j'ai ce fichier :
hello
world
hello world
Ce programme
#!/bin/bash
for i in $(cat $1); do
echo "tester: $i"
done
sorties
tester: hello
tester: world
tester: hello
tester: world
J'aimerais avoir le for
parcourir chaque ligne individuellement en ignorant les espaces, c'est-à-dire que les deux dernières lignes doivent être remplacées par
tester: hello world
Utilisation des guillemets for i in "$(cat $1)";
résultats en i
se voir attribuer l'ensemble du dossier en une seule fois. Que dois-je changer ?
Réponse acceptée :
(9 ans plus tard :)
Les deux réponses fournies échoueraient sur les fichiers sans nouvelle ligne à la fin, cela sauterait effectivement la dernière ligne, ne produirait aucune erreur, conduirait à un désastre (appris à la dure :).
La meilleure solution concise que j'ai trouvée jusqu'à présent "Just Works" (à la fois en bash et en sh):
while IFS='' read -r LINE || [ -n "${LINE}" ]; do
echo "processing line: ${LINE}"
done < /path/to/input/file.txt
Pour une discussion plus approfondie, consultez cette discussion sur StackOverflow :Comment utiliser "pendant la lecture" (Bash) pour lire la dernière ligne d'un fichier s'il n'y a pas de nouvelle ligne à la fin du fichier ?
Attention :cette approche ajoute une nouvelle ligne supplémentaire à la dernière ligne s'il n'y en a pas déjà.