bashを使用した多次元json配列の解析

bashを使用した多次元json配列の解析

Bashで多次元json配列を繰り返したいのですが、まだ解決策が見つかりませんでした。

多次元配列は次のとおりです。

{
    "FILES": [
      [ "file1.yaml", "file2.yaml", "file3.yaml" ],
      [ "file1.json", "file2.json" ]
    ]
}

各配列を最終的にコマンドの入力になる文字列に変換したいと思います。

だからこんな感じ:

#!/bin/bash

Json_Array=$(cat <<EOF
{
    "FILES": [
      [ "file1.yaml", "file2.yaml", "file3.yaml" ],
      [ "file1.json", "file2.json" ]
    ]
}
EOF
)

function runCmd ()
{
  echo "command $1"
}

function runCmds ()
{
  jq -c '.FILES' <<< "$Json_Array" | while read i; do
    runCmd "$(echo $i | jq .)"
  done
}

runCmds

したがって、出力は次のようになります。

command file1.yaml file2.yaml file3.yaml
command file1.json file2.json

どんな助けをありがとう!

ベストアンサー1

各配列の先頭にオプションを指定してコマンドを挿入し、各配列を渡して@shシェルコードを作成します。シェルコードを評価します。

-aここでは、コマンド(および)に追加の-b hello引数を挿入する方法も示します。

eval "$( jq -r '.FILES | map([ "command", "-a", "-b", "hello", .[] ])[] | @sh' file.json )"

質問にJSONが与えられると、シェルで次のコマンドが実行されます。

'command' '-a' '-b' 'hello' 'file1.yaml' 'file2.yaml' 'file3.yaml'
'command' '-a' '-b' 'hello' 'file1.json' 'file2.json'

JSON文書が変数にある場合は、以下を$json使用してください。

eval "$( jq -r '.FILES | map([ "command", "-a", "-b", "hello", .[] ])[] | @sh' <<<"$json" )"

おすすめ記事