Чтение файла по строкам (с пробелом) в сценариях Unix Shell - Проблема

Я хочу прочитать файл строки за строкой в ​​сценариях оболочки Unix. Строка может содержать начальные и конечные пробелы, и я хочу читать эти пробелы также в строке. Я попытался использовать "while read line", но команда read удаляет символы пробела из строки:( Пример, если строка в файле: -

abcd efghijk
 abcdefg hijk
Строка

должна читаться как: - 1) "abcd efghijk" 2) " abcdefg hijk"

То, что я пробовал, это (что не сработало): -

while read line
do
   echo $line
done < file.txt

Я хочу, чтобы строка включала в себя пробелы и символы табуляции. Пожалуйста, предложите способ.

Ответы

Ответ 1

Попробуйте это,

IFS=''
while read line
do
echo $line
done < file.txt

EDIT:

От man bash

IFS - The Internal Field Separator that is used for word
splitting after expansion and to split lines into words
with  the  read  builtin  command. The default value is
``<space><tab><newline>''

Ответ 2

Вы хотите прочитать необработанные строки, чтобы избежать проблем с обратными косыми чертами во вводе (используйте -r):

while read -r line; do
   printf "<%s>\n" "$line"
done < file.txt

Это будет содержать пробелы внутри строки, но удаляет ведущие и завершающие пробелы. Чтобы сохранить их, установите IFS пустым, как в

while IFS= read -r line; do
   printf "%s\n" "$line"
done < file.txt

Теперь это эквивалент cat < file.txt, если file.txt заканчивается новой строкой.

Обратите внимание, что вы должны удвоить кавычку "$line", чтобы разделить слова на разделение строки на отдельные слова - таким образом, теряя несколько пробельных последовательностей.