[jq] --argjson でシェル変数を JSON の値として渡す
作成日: 2026年10月24日
jq の --argjson オプションを使用すると、シェル変数に入った JSON テキストを数値や配列などの型を保ったまま jq のフィルター内で利用できます。
下記の例では、数値の shell_count と JSON 配列の shell_tags を渡し、JSON のプロパティに設定します。
shell_count=3
shell_tags='["linux","jq"]'
printf '%s\n' '{}' | jq \
--argjson count "$shell_count" \
--argjson tags "$shell_tags" \
'.count = $count | .tags = $tags'
実行結果は下記のとおりです。
{
"count": 3,
"tags": [
"linux",
"jq"
]
}
説明
--argjson count "$shell_count"は、3を JSON の数値として jq の変数$countに渡します。--argjson tags "$shell_tags"は、JSON 配列を jq の変数$tagsに渡します。.count = $count | .tags = $tagsは、入力オブジェクトにcountとtagsのプロパティを設定します。
--arg では渡す値が文字列になりますが、--argjson では値を JSON として解釈します。例えば、3 は数値、["linux","jq"] は配列として扱われます。
--argjson に渡す値は有効な JSON である必要があります。文字列を渡す場合は JSON の二重引用符も含める必要があるため、通常の文字列なら --arg が簡単です。