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" )"

관련 정보