2016-01-08 2 views
1

Ответ на вопрос Reading file line by line (with space) in Unix Shell scripting - Issue обычно не работает в отличие от локации 'C'.bash чтение полной строки из stdin или while цикл с пробелами без обрезки пустых символов

Bash меня удивляет, потому что внутренняя функция «read» обрезает белые символы. Я не нашел полного решения, только две частичные. то я описываю его здесь.

например, у вас есть текстовый файл для строк, содержащих конечные пробелы. я пишу кавычки для ясности:

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

при вызове этого:

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

вы увидите:

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

взгляд на это, вторая линия обрезается пространство! Как предотвратить это? это мой ответ выше:

ответ

1

Используйте пустой IFS читать все символы, включая начальные и конечные пробелы:

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

Выход:

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

IFS = 0 не решает проблемы, так как конечные пробелы по-прежнему обрезаются при установке любого другого языка в вашей системе. – Znik

+0

Откуда вы получили 'IFS = 0'? Я написал 'while IFS = read ...', что означает пустую 'IFS' – anubhava

+1

[Вот рабочая демонстрация] (http://ideone.com/HTpTCq) – anubhava