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

ath*_*aos 14 macos bash echo

在Mac OSX上的bash中,我有一个包含行的文件(测试用例)

x xx xxx
xxx xx x
Run Code Online (Sandbox Code Playgroud)

但是当我执行命令时

for i in `cat r.txt`; do echo "$i"; done
Run Code Online (Sandbox Code Playgroud)

结果不是

x xx xxx
xxx xx x
Run Code Online (Sandbox Code Playgroud)

正如我想要的那样

x
xx
xxx
xxx
xx
x
Run Code Online (Sandbox Code Playgroud)

我怎么做回声给我'x xx xxx'?

Oli*_*rth 30

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

IFS=$'\n'
for i in `cat r.txt`; do echo "$i"; done
unset IFS
Run Code Online (Sandbox Code Playgroud)