Как прочитать содержимое файла в переменной за один раз? - программирование
Подтвердить что ты не робот

Как прочитать содержимое файла в переменной за один раз?

В Java, если вы знаете, что файл очень мал, вы можете использовать метод readBytes() для чтения содержимого за один раз вместо того, чтобы читать его по строкам или с помощью буфера.

Просто интересно в оболочке script, я знаю, что мы можем сделать что-то вроде:

    while read line
    do
      echo $line
      LINE = $line
    done < "test.file"
    echo $LINE

Если мой test.file похож:

testline1
testline2
testline3

Это дает мне только последнюю строку $LINE. $LINE содержит "testline3".

Мой вопрос: как я могу прочитать весь файл с несколькими строками в одну переменную, поэтому я могу получить $LINE="testline1\ntestline2\ntestline3"?

4b9b3361

Ответ 1

Обработать строки внутри цикла, а не после него. Если вам действительно нужен файл в переменной:

var=$(<file)

Ответ 2

Другой альтернативой является использование встроенного файла mapfile:

mapfile < test.file
echo "${MAPFILE[@]}"

Ответ 3

В качестве другого варианта вы можете построить массив строк. Если вы используете bash 4+, вы можете использовать встроенный mapfile:

mapfile -t lines <test.file

Если вы хотите, чтобы строки были выведены и сохранены, вы могли бы сделать что-то вроде этого:

mapfile -t lines < <(tee /dev/tty <test.file)

Тогда "${lines[0]}" будет первой строкой файла, "${lines[1]}" второй и т.д. ${#lines[@]} будет число строк; "${lines[@]}" будет весь массив, а "${lines[*]}" - это строки, соединенные вместе с пробелами в одну большую строку.

Для более старых версий bash вы можете построить массив вручную:

lines=()
while IFS= read -r line
do
  printf '%s\n' "$line"
  lines+=("$line")
done < test.file