в bash "for; do echo; done" разбивает строки на пробелы - PullRequest
13 голосов
/ 01 января 2012

В bash на Mac OSX у меня есть файл (контрольный пример), содержащий строки

x xx xxx
xxx xx x

Но когда я выполняю команду

for i in `cat r.txt`; do echo "$i"; done

результат не

x xx xxx
xxx xx x

как хочу а точнее

x
xx
xxx
xxx
xx
x

Как мне сделать, чтобы эхо дало мне 'x xx xxx'?

Ответы [ 3 ]

27 голосов
/ 01 января 2012

По умолчанию цикл Bash for разделяется на все пустое пространство. Вы можете изменить это, установив переменную IFS:

IFS=$'\n'
for i in `cat r.txt`; do echo "$i"; done
unset IFS
3 голосов
/ 01 января 2012

Либо настройте IFS как предложено, либо используйте while:

while read theline; do echo "$theline"; done <thefile
0 голосов
/ 01 января 2012
IFS="\n"
for i in `cat r.txt`; do echo "$i"; done
unset IFS
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...