用于循环的Bash Script for循环而不是使用整行


1

我正在写一个非常简单的脚本,而且我陷入了一些愚蠢的事情。基本上我有文本文件,其中每行由3个单词组成,由空格分隔。当您捕获文件时,它会正确显示所有内容。例如,捕获文件看起来像这样:

bird dog mouse
ferret bunny hare

我正在做这样一个简单的for循环:

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

回声显示问题。该命令需要以

command bird dog mouse

而它正在运行

command bird
command dog
command mouse

这似乎应该是一个简单的修复,但我不能让我的搜索条件正确找到解决方案。

谢谢!

Answers:


5

问题是使用 cat 在像这样的子shell替换中,将使bash根据输出标记化输出 IFS,默认包含空格。这是a的正常行为 for 环。可能最容易解决的问题是:

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

注意 bash 将args拆分为 command但是。如果您想将该行作为一个arg,那么只需引用它:

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

1
不是 cat 在子壳中 本身 ,但语义 for
geekosaur

对,我的措辞不好。你说的是对的。
FatalError
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.