在bash中,“for; do echo; done”在空格处分割行

时间:2012-01-01 18:36:48

标签: macos bash echo

在Mac OSX上的bash中,我有一个包含行

的文件(测试用例)
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 个答案:

答案 0 :(得分:25)

默认情况下,Bash for循环在所有空格上分割。您可以通过设置IFS变量来覆盖它:

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

答案 1 :(得分:3)

根据建议设置IFS或使用while

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

答案 2 :(得分:-1)

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