LINUX.ORG.RU

Перевод строки при чтении файла в переменную


0

1

Запнулся на простейшей вещи...
Читаю файл из /proc:
#cat /proc/somefile
123
324
546
6567
576
blah-blah-blah

читаю его же в переменную для последующего разбора (ибо не осилил на awk разбор множественных полей с разными условиями за раз, а каждый раз перечитывать файл не кошерно, так как он очень быстро обновляется и значения становятся неактуальными):
#var=$(cat /proc/somefile)
вывожу и удивляюсь
#echo $var
123 324 546 6567 576 blah-blah-blah

Куда девались переводы строк и как их вернуть на место?
Многозначительная информация на всякий случай:
#echo $TERM
linux
#echo $IFS
#echo $BASH_VERSION
3.1.7(1)_release

★★★★★

Последнее исправление: zolden (всего исправлений: 1)

~ % echo '123
: 324
: 546
: 6567
: 576' > test
~ % cat test 
123
324
546
6567
576
~ % TEST=$(cat test)
~ % echo $TEST 
123 324 546 6567 576

# хм, плохо

~ % echo $IFS

# это пробел, вероятно

~ % IFS=''
~ % echo $TEST 
123
324
546
6567
576

# oh wow, работает
GotF ★★★★★
()
Ответ на: комментарий от GotF

Вы - мой герой. Или героиня.

zolden ★★★★★
() автор топика

Когда пишешь на баше, кавычки и фигурные скобочки - твои друзья.

const86 ★★★★★
()
Ответ на: комментарий от YAR

Спасибо, это даже круче чем с IFS, ну и безопаснее и красивее.
Всё-таки не совсем понятна логика шелла...почему вывод в stdout и в переменную форматируется по разному

zolden ★★★★★
() автор топика
Ответ на: комментарий от zolden

> почему вывод в stdout и в переменную форматируется по разному

Дело не в этом. Когда bash пытается подставить содержимое переменной в команде echo $var, он заменяет переводы строк пробелами и получает echo bla bla bla т.е. команда с несколькими параметрами. Если же использовать кавычки, то содержимое переменной подставляется как есть и получается:
echo «bla
bla
bla»

Т.е. один многострочный параметр.

Аналогично кавычки нужны и при выполнении var=«$(какая-то команда)», чтобы результат ушел в переменную как есть, без анализа своего содержимого.

geekless ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.