Le chat avec la nouvelle ligne
Mon fichier d'entrée le contenu est
bienvenue
welcome1
welcome2
Mon script est
for groupline in `cat file`
do
echo $groupline;
done
J'ai obtenu le résultat suivant.
bienvenue welcome1 welcome2
Pourquoi il n'est pas d'impression de la ligne vide. Je veux la raison.
Vous devez vous connecter pour publier un commentaire.
vous devez définir
IFS
de retour à la ligne\n
Ou de mettre des guillemets doubles. Voir ici pour l'explication
sans l'ingérence de l'IFS, la "bonne" façon est d'utiliser tout lu en boucle
IFS=$"\n"
=n
mais avecIFS=$'\n'
semble œuvresParce que vous êtes en train de faire à tort et à travers. Vous souhaitez
while
pasfor
, et que vous voulezread
, pascat
:for
ne se soucie pas des "lignes". Il se soucie uniquement de "mots", et rien dans$IFS
est utilisé pour séparer les mots. Par défaut, il contient" \t\n"
, ce qui signifie que les retours à la ligne sont ignorés.La solution ghostdog74 fourni est utile, mais il a un défaut.
FI ne pouvait pas utiliser les guillemets doubles (au moins sous Mac OS X), mais on peut utiliser les guillemets simples comme:
C'est sympa, mais pas de dash-compatible, c'est peut-être mieux:
La ligne blanche sera mangé dans le programme suivant:
Mais vous ne pouvez pas ajouter des guillemets autour de
$(cat file)
, il permettra de traiter le fichier en entier en une seule chaîne.Si vous voulez ligne vide également être traitées, à l'aide de la suite de
À l'aide de
IFS=$"\n"
etvar=$(cat text.txt)
supprime toutes les "n" caractères à partir de la sortieecho $var