@Drovosek01

Как в bash полностью сохранить многострочное содержимое файла в переменную?

Для примера возьмем файл /etc/hosts

Если я попытаюсь сохранить его содержимое так:
file_content="$(cat /etc/hosts)"
или
file_content="$(printf "%s" "$(cat /etc/hosts)")"

То все переносы строк в конце файла удаляться. Как я понимаю из-за конструкции $()

Вопрос:
Как в bash полностью сохранить многострочное содержимое файла в переменную (включая пробелы, отступы и все переносы строк в конце файла)?

P.S.

ChatGPT в одном из вариантов подсказал такой способ
file_content=""
FS= read -r -d '' file_content < "/etc/hosts"

Но хочется посмотреть другие варианты
  • Вопрос задан
  • 243 просмотра
Пригласить эксперта
Ответы на вопрос 6
@tarasovc47
Эникей со стажем))
cat > foo.txt <<EOT
bar
baz
EOT
Ответ написан
@SunTechnik
Как костыльный вариант:
file_content="$(cat /etc/hosts ; echo Y)"

Помним, что последняя строка- мусор. При обработке ее убираем:
echo "$f" | sed '$d'
Ответ написан
Комментировать
SignFinder
@SignFinder
Wintel\Unix Engineer\DevOps
Закодировать в base64, при применении раскодировать
Ответ написан
CityCat4
@CityCat4
//COPY01 EXEC PGM=IEBGENER
file_content="$(cat /etc/hosts)"

Зачем???
Тыщу лет читаю файлы совершенно тупым способом:
_flist=`cat /etc/hosts`
И получаю его со всеми там символами в том числе и с переводом строки
Ответ написан
@dim5x
ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
Если вам достаточно пробелов, отступов и пустых строк:
file_content="$(cat /some/file)"

echo $file_content
>>> lol kek cheburek. kol

echo "$file_content"
>>> lol
kek cheburek.
kol


Если вам зачем-то нужны ещё и переносы строк:
f=""
while IFS= read -r line || [[ -n "$line" ]]; do
    f+="${line}"$'\n'
done < 1.txt

f="${f%$'\n'}"
echo "$f" > 2.txt
Ответ написан
#!/bin/bash
a=`</etc/hosts`
echo "$a"
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы