将jq保存到变量脚本bash中

时间:2017-10-27 22:00:41

标签: bash ubuntu scripting

此脚本的主要目标是下载以下URL

.toggle()

出于这个原因,我需要获得我用这种格式获得的NBA比赛的游戏。

https://stats.nba.com/stats/boxscoresummaryv2?GameID=(varGameId)

完整脚本的步骤

1 - 创建包含日期的文件夹

2 - 转到

之前创建的文件夹

3 - 下载今天的分数

4 - 使用jq .length获取今天的总比赛

5 -Loop迭代当天的总比赛。

我的问题是我不知道如何通过这个游戏我会变成变量String。

$(cat 00_todays_scores.json | jq '.gs.g['$COUNTER'].gid')

完整的脚本。

 $(cat 00_todays_scores.json | jq '.gs.g['$COUNTER'].gid')

问候! :)

2 个答案:

答案 0 :(得分:0)

我认为这只是一个你正在引用的引用问题。两件事:

  1. 变量只会在"双引号内插值。在单引号内,它只会被视为字符串文字" $COUNTER"。
  2. bash不会将您的引文解释为外引号和内引号,而是将其作为两对引用。
  3. 以下内容应该解决这两个问题。 (不要担心$ COUNTER周围的明显单步.Bash只会看到双引号。当它到达jq时,变量已经被插值并且它是鳍用单引号。)

    while [  $COUNTER -lt $total ]; do
        mkdir $(cat 00_todays_scores.json | jq ".gs.g['$COUNTER'].gid")
        let COUNTER=COUNTER+1 
    done
    

    (虽然我对jq的了解不够,知道它的语法是否正确。)

答案 1 :(得分:0)

为什么一次只能检索一个GID?

# with bash 4.0 or newer
readarray -t gids < <(jq -r '.gs.g[].gid' <00_todays_scores.json)

...将把你所有的GID放到一个bash数组中(如果你有bash 4.0或更新版本)。

使用bash 3.x,它看起来像:

# doesn't require bash 4.0; passes through invalid exit status if jq doesn't succeed
IFS=$'\n' read -r -d '' -a gids \
  < <(jq -r '.gs.g[].gid' <00_todays_scores.json && printf '\0')

无论哪种方式,您都可以按如下方式打印该数组:

declare -p gids

...或通过以下方式迭代:

for gid in "${gids[@]}"; do
  echo "Retrieved a gid: $gid"
done

...或将其包含的每个元素传递给mkdir的单个调用:

mkdir -p -- "${gids[@]}"