Передача ассоциативных массивов Bash в качестве аргумента фильтру jq

Добавьте это в /etc/NetworkManager/NetworkManager.conf

[connectivity]

uri=

interval=0

0
20.03.2020, 22:31
1 ответ

Если вы можете превратить массив bash в действительный объект JSON, то (с небольшими изменениями интерполяции строк )вы можете передать его с помощью --argjson. Например, учитывая

$ declare -p States
declare -A States=([GA]="Georgia" [NY]="New York" [ME]="Maine" )

затем ссылаясь на

, затем

$ for k in "${!States[@]}"; do printf '{"name":"%s",\n"value":"%s"}\n' $k "${States[$k]}"; done | jq -s 'reduce.[] as $i ({};.[$i.name] = $i.value)'
{
  "GA": "Georgia",
  "NY": "New York",
  "ME": "Maine"
}

так что

$ jq -r --argjson states \
    "$(for k in "${!States[@]}"; do printf '{"name":"%s",\n"value":"%s"}\n' $k "${States[$k]}"; done | jq -s 'reduce.[] as $i ({};.[$i.name] = $i.value)')" \
    '"\($states[.defaultState]), \(.defaultState), \(.defaultCity), \(.zip5)"' file.json
Georgia, GA, ATLANTA, 30301
2
28.04.2021, 23:20

Теги

Похожие вопросы