в bash "for; do echo; done" разбивает строки на пробелы

в 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

как сделать echo дать мне "x xx xxx"?

3 ответов


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

IFS=$'\n'
for i in `cat r.txt`; do echo "$i"; done
unset IFS

либо IFS а предложила или использовать while:

while read theline; do echo "$theline"; done <thefile

IFS="\n"
for i in `cat r.txt`; do echo "$i"; done
unset IFS