为什么我从 while read 循环中得到这个输出?

Why do I get this output from my while read loop?

我编写了一个脚本,使用 CSV 文件中的信息从中创建一个字符串。该脚本遍历每一行,从中生成一个字符串并将其附加到上一行的字符串中。所以我最终得到一个长字符串,其中包含来自所有行的信息。脚本的结果应该是只打印最后的字符串。

我的问题:正如您在终端的输出中看到的那样,脚本输出每个步骤(在本例中为 3 个)字符串,而不仅仅是最后一个。为什么会这样?

这是我的 CSV:

42342;home;2020-01-12;2020-01-13
45235;work;2020-04-12;2020-04-13
68787;photo;2020-05-12;2020-05-13

这是我的 bash 脚本:

getPhotosCommand(){
    com=""
    header="ID;DIR;START_DATE;END_DATE" 
    
    while read line; do
        IFS=';' read -r -a array <<< "$line"

        dir=${array[2]}
        start_date=${array[3]}
        end_date=${array[4]}

        newCom="cli-search -d $dir -s $start_date -e $end_date >> photos.txt && "
        com=$com$newCom
    
    echo "$com cli-search download -d $dir -p @photos.txt"

    done < $file_new_photos
}

终端输出:

cli-search -d home -s 2020-01-12 -e 2020-01-13 >> photos.txt && cli-search download -d home -p @photos.txt
cli-search -d home -s 2020-01-12 -e 2020-01-13 >> photos.txt && cli-search -d home -s 2020-04-12 -e 2020-04-13 >> photos.txt && cli-search download -d home -p @photos.txt
cli-search -d home -s 2020-01-12 -e 2020-01-13 >> photos.txt && cli-search -d home -s 2020-04-12 -e 2020-04-13 >> photos.txt && cli-search -d home -s 2020-05-12 -e 2020-05-13 >> photos.txt &&  cli-search download -d home -p @photos.txt

由于这一行,每一行都附加到“$com”变量:

com=$com$newCom

你的 echo 语句看起来应该在循环之外,即。在 done 行之后。

如果您只想要最后一行,请移动 echo 语句。 如果您想要 3 行,请将 echo 语句更改为使用 $newCom 而不是 $com.