2016-01-08 1 views
1

Répondre en question Reading file line by line (with space) in Unix Shell scripting - Issue ne fonctionne généralement pas dans la localisation de «C». Bash me surprend parce que la fonction interne 'read' coupe les caractères blancs. Je n'ai pas trouvé de résolution complète, seulement deux partiels. alors je le décris ici. Par exemple, vous avez un fichier texte contenant des lignes contenant des espaces de fin. j'écris des citations pour plus de clarté:bash lecture ligne complète à partir de stdin ou tout en boucle avec des espaces sans rognage caractères

'line 1 without ending spaces' 
'line 2 with ending spaces ' 

lorsque vous appelez ceci:

cat somefile.txt|while read LINE; do echo xx"$LINE"xx; done 

vous verrez:

'line 1 without ending spaces' 
'line 2 with ending spaces' 

regard sur cette deuxième ligne est coupée espace! Comment éviter cela? il est ma réponse ci-dessus:

Répondre

1

Utilisez un IFS vide pour lire tous les caractères, y compris les espaces de fuite:

while IFS= read -r line; do echo "[$line]"; done < file 

Sortie:

[line 1 without ending spaces] 
[line 2 with ending spaces ] 
+0

IFS = 0 ne résout pas les problèmes parce que les espaces de fin sont toujours tronqués lorsque vous définissez une autre langue sur votre système. – Znik

+0

D'où avez-vous eu 'IFS = 0'? J'ai écrit 'alors que IFS = read ...' ce qui signifie un 'IFS' vide – anubhava

+1

[Voici une démo de travail] (http://ideone.com/HTpTCq) – anubhava