2010-01-26 5 views
1

J'ai un script bash qui se lit Lineasmagasin en ligne dans une chaîne en bash

filename=$ 

while read LINE 
do 
...... 
done < $filename 

Je me demande comment pourrais-je stocker $ LINE dans une chaîne (my_string) donc pour chaque ligne que je peux faire

echo $ my_thing » « de my_string $

J'ai essayé plusieurs choses mais quand j'imprimer avec écho ou printf, LINE $ Supprime tout avant il

Tjans

Répondre

0

quand vous faites un certain temps de lire en boucle comme ça, la ligne est stockée dans la variable $ ligne, alors essayez cette

while read -r LINE 
do 
echo "$LINE $LINE" 
done <"file" 

si vous souhaitez enregistrer LINE dans une autre chaîne, faire ce

my_other_string=$LINE 
1

Votre fichier peut contenir des retours chariot. Par exemple, il peut s'agir d'un fichier DOS ou Windows qui a ce style de terminaisons de ligne. Si tel est le cas, vous pouvez exécuter dos2unix sur le fichier pour le convertir en fin de ligne de style Unix ou vous pouvez les dépouiller que vous les lisez:

LINE="${LINE//$'\r'}" 

qui irait juste après la déclaration do.

0

Je pense que Dennis Williamson a identifié pourquoi vous voyez le comportement "supprime tout imprimé avant".

Permettez-moi simplement que si vous allez faire « tout lire ... » le traitement dans un script bash, vous aurez envie d'utiliser à la fois le drapeau -r pour lire et définir votre IFS à la chaîne nulle. Le premier est nécessaire pour garder toutes les barres obliques inverses dans le stdin mangé brut, et le second est nécessaire pour éviter de couper les espaces au début et à la fin du stdin. Vous pouvez les combiner comme ceci:

while IFS= read-r LINE; do 
    echo "$LINE" 
done < "file" 
Questions connexes