Bash 脚本 for 循环会拆分行而不是使用整行

Bash 脚本 for 循环会拆分行而不是使用整行

我正在编写一个非常简单的脚本,但遇到了一些愚蠢的问题。基本上,我有一个文本文件,其中每行由 3 个单词组成,单词之间用空格隔开。当您 cat 该文件时,它会正确显示所有内容。例如,cat 该文件看起来像这样:

bird dog mouse
ferret bunny hare

我正在做一个简单的 for 循环,如下所示:

for line in $(cat pets.txt)
do
     echo $line
     "command $line"
done

echo 显示问题。该命令需要按以下方式运行:

command bird dog mouse

相反,它运行为

command bird
command dog
command mouse

这看起来应该是一个简单的修复,但我无法正确使用搜索词来找到解决方案。

谢谢!

答案1

问题是,cat在子 shell 中使用这样的替换将使 bash 根据 标记输出IFS,默认情况下包含空格。这是for循环的正常行为。可能最简单的解决方法是:

while read line
do
     echo $line
     command $line
done < pets.txt

但是请注意,这bash会将参数拆分为command。如果您希望将该行作为一个参数,则只需引用它:

while read line
do
     echo $line
     command "$line"
done < pets.txt

相关内容