为什么我从 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
.
我编写了一个脚本,使用 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
.