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

发布于 2024-12-23 21:02:50 字数 326 浏览 2 评论 0原文

在 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

如何让 echo 给我 'x xx xxx'?

In bash on Mac OSX, I have a file (test case) that contains the lines

x xx xxx
xxx xx x

But when I execute the command

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

the result is not

x xx xxx
xxx xx x

as I want but rather

x
xx
xxx
xxx
xx
x

How do I make echo give me 'x xx xxx'?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

倒数 2024-12-30 21:02:50

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

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

By default, a Bash for loop splits on all whitespace. You can override that by setting the IFS variable:

IFS=
\n'
for i in `cat r.txt`; do echo "$i"; done
unset IFS
紫南 2024-12-30 21:02:50

按照建议设置 IFS 或使用 while

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

Either setting IFS as suggested or use while:

while read theline; do echo "$theline"; done <thefile
久伴你 2024-12-30 21:02:50
IFS="\n"
for i in `cat r.txt`; do echo "$i"; done
unset IFS
IFS="\n"
for i in `cat r.txt`; do echo "$i"; done
unset IFS
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文