【发布时间】:2022-01-14 09:19:55
【问题描述】:
我编写了一个脚本,该脚本使用 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
【问题讨论】:
-
‘为什么会这样?’ 因为你在循环中放了一个
echo...? -
@Biffen
echo在循环之后。循环只是while,对吧?或者回声应该在哪里?该函数的结果应该是只回显了最后一个字符串。 -
不,
echo在循环内。循环在done结束。 (不正确的)缩进没有任何意义; Bash 不是 Python。 -
您的解析代码可以大大简化为
while IFS=";" read -r id dir start_date end_date; do... -
循环体看起来很模糊,就像您试图将命令保存在变量中一样。这基本上不是一个好主意。见mywiki.wooledge.org/BashFAQ/050
标签: bash shell command-line terminal output