如何从bash中读取整行

web*_*org 8 bash shell parsing lines

我有一个file.txt包含内容的文件

i love this world

I hate stupid managers
I love linux

I have MS
Run Code Online (Sandbox Code Playgroud)

当我执行以下操作时:

for line in `cat file.txt`; do
echo $line
done
Run Code Online (Sandbox Code Playgroud)

它给出了类似的输出

I
love
this
world
I
..
..
Run Code Online (Sandbox Code Playgroud)

但我需要输出如下面的整行 - 任何想法?

i love this world

I hate stupid managers
I love linux

I have MS
Run Code Online (Sandbox Code Playgroud)

Sie*_*geX 18

while read -r line; do echo "$line"; done < file.txt
Run Code Online (Sandbox Code Playgroud)


tob*_*ies 6

正如@Zac在评论中指出的那样,你发布的问题的最简单的解决方案就是cat file.txt这样我必须假设有一些更有趣的事情,所以我已经提出了解决问题的两个选项:

这里有两件事你可以设置IFS(内部字段分隔符)到换行符并使用现有代码,或者你可以在while循环中使用reador line命令

IFS="
"
Run Code Online (Sandbox Code Playgroud)

要么

(while read line ; do
    //do something
 done) < file.txt
Run Code Online (Sandbox Code Playgroud)

  • `IFS = $'\n'`更具可读性.没有必要将`while`循环放在子shell中. (4认同)