我有一个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 会忽略变量中的换行符,除非您引用它们。但这样做过于复杂化了。