La lecture de fichiers ligne par ligne en utilisant pour la boucle script bash
Dire par exemple j'ai un fichier appelé "tests",il contient
a
b
c
d
Je suis en train de lire ce fichier ligne par ligne et il devrait sortir
a
b
c
d
J'ai créer un script bash appelé "lire" et essayer de lire ce fichier à l'aide de la boucle
#!/bin/bash
for i in ${1}; do //for the ith line of the first argument, do...
echo $i // prints ith line
done
Je l'exécuter
./read tests
mais il me donne
tests
Personne ne sait ce qui s'est passé? Pourquoi faut-il imprimer "tests" au lieu du contenu de la "tests"? Merci à l'avance.
Vous devez vous connecter pour publier un commentaire.
Cette solution permet de gérer des fichiers avec des caractères spéciaux dans le nom du fichier (comme des espaces ou des retours chariot) contrairement à d'autres réponses.
while IFS= read -r line
-- sans "IFS=" vous allez perdre avant/après d'espaces.Vous besoin de quelque chose comme ceci plutôt:
ce que vous avez écrit après l'expansion deviendra:
si vous voulez toujours
for
boucle, faire quelque chose comme:read line || [ "$line" ];
correctifsset -- $(cat $somefile); while ([ "$1" ]) do stuff;shift;done
notez qu'ici, $ @ permettrait d'obtenir jusqu'à N variables (une pour chaque occurence d'un caractère à partir de $IFS dans le fichier d'entrée) ... et pourrait utiliser BEAUCOUP de mémoire pour les gros fichiersCela fonctionne pour moi:
#!/bin/bash