在 Bash 中使用 read 命令逐行读取文件不起作用

在 Bash 中使用 read 命令逐行读取文件不起作用

我有一个text.txt这样的文件

line1
line2
line3

我想编写一个循环遍历每一行并回显的脚本

modified line1
modified line2
modified line3

这是一个非常常见的解决方案的脚本:

while IFS= read -r line; do
  echo modified $line
done <<< $(cat ~/text.txt)

但我得到的输出是:

modified line1 line2 line3

什么地方出了错?

答案1

问题出在最后一行,您不需要变量(命令替换)或cat,因为read已经可以读取文件。如果你这样做:

while IFS= read -r line; do
  echo modified $line
done < ~/text.txt

有用。

此外,如果您引用如下变量,您的命令将起作用:

"$(cat ~/text.txt)"

因为 bash 会忽略变量中的换行符,除非您引用它们。但这样做过于复杂化了。

相关内容