遍历bash中的日期的json数组(具有空格)

问题描述 投票:0回答:1

我有一个数组,该数组存储在bash变量中,该变量是日期的json数组(当前由单独的脚本生成)。看起来如下

["2019-09-19 03:13:29", "2019-09-19 20:20:18", "2019-09-19 18:19:50", "2019-09-19 06:07:17", "2019-09-19 11:53:25"]

我想遍历这些日期并保留日期中的空白,以便可以在gdate命令中使用它们。我当前正在使用jq,但是这会将日期部分与时间部分分开。即

dates=$(python date_producing_script.py | jq -c -r '.[]')
for date in ${dates[@]}; do
    echo $date
    #end goal is to do something here w/ gdate ex gdate -d $date ...
done

但是这给类似的东西

2019-09-19
03:13:29
2019-09-19
20:20:18
2019-09-19
18:19:50
2019-09-19
06:07:17
2019-09-19
11:53:25

我正在寻找类似以下内容的地方

2019-09-19 03:13:29
2019-09-19 20:20:18
2019-09-19 18:19:50
2019-09-19 06:07:17
2019-09-19 11:53:25

(给我一个令人困惑的事情是,如果我只是在终端中执行python date_producing_script.py | jq -c -r '.[]'命令,它看起来就是我想要的样子)

但是理想情况下,我想要类似的东西。无论如何,可以从shell脚本中的输入中获得此结果

json bash shell jq
1个回答
1
投票

您的jq很好;问题出在循环遍历bash数组的方式上,可以从以下bash打字稿中看到:

$ ary=("a b" "c d")
$ for x in ${ary[@]} ; do echo "$x" ; done
a
b
c
d
$ for x in "${ary[@]}" ; do echo "$x" ; done
a b
c d
$ 

IOW

"${dates[@]}"

0
投票

这里是一种解决方案:

#!/bin/bash
#
IFS=','
dates='["2019-09-19 03:13:29", "2019-09-19 20:20:18", "2019-09-19 18:19:50", "2019-09-19 06:07:17", "2019-09-19 11:53:25"]'

for date in ${dates[@]}
do
    # Cleanup $date
    thedate=$(echo $date | tr -d '\[\]"' | sed -e 's/^[[:space:]]*//')
    echo "-->$thedate<--"
done
  • IFS:将分隔符设置为,
  • [$dates现在在,上分隔]]
  • $thedate$date,其中删除了[]"sed将删除前缀空格。
  • 我放置了--><--以表示$thedate不包含任何空格。
  • [[0]也很可能也有解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.