在我的文件“foo”中有第一行:“a b”,第二行:“c d”:
$ cat foo
a b
c d
我想在终端循环打印这两行:一个接一个:
$ for i in $(cat foo); do echo $i; done
但是在输出中,'echo' 命令破坏了顺序,所以不是:
a b
c d
我实际上有:
a
b
c
d
在我的文件“foo”中有第一行:“a b”,第二行:“c d”:
$ cat foo
a b
c d
我想在终端循环打印这两行:一个接一个:
$ for i in $(cat foo); do echo $i; done
但是在输出中,'echo' 命令破坏了顺序,所以不是:
a b
c d
我实际上有:
a
b
c
d
for i in $(cat foo)
不会循环行,而是由字段分隔符$IFS
拆分的单词(或字段) 。它默认为\n\t
(空格、换行符、制表符)。如果您仅将字段分隔符更改为换行符,则可以按原样使用您的命令(免责声明:请阅读下文!):
您可能需要备份 IFS 以便稍后恢复:
输出:
但是,这被认为是不好的做法。
while IFS= read -r line; do ... done < file
grep
、sed
或awk
。请阅读为什么使用 shell 循环处理文本被认为是不好的做法?.
您可以
while read
用于此目的添加分隔符以供您理解