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



我写了一个脚本,使用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

最新更新