【问题标题】:Why do I get this output from my while read loop? [closed]为什么我会从我的 while read 循环中得到这个输出? [关闭]
【发布时间】: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


【解决方案1】:

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

com=$com$newCom

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-07
    • 1970-01-01
    • 2016-07-27
    • 2017-05-17
    • 1970-01-01
    • 2022-06-17
    • 1970-01-01
    相关资源
    最近更新 更多