bashにて、以下のtest.jsonをjqのselect分で、"A":"abc"の"B"キーの値を表示したい場合
cat test.json | jq '.zzz[] | select(.a=="abc").B'
と値をべたウチでjqコマンドを打つと想定通りの出力が得られるのですが、
検索対象を変数に入れている場合、エラーが返ってきます。おそらく文字列解釈されているのですが
どのように修正を行えばよいでしょうか。
※検索対象は、固定文字列 + 変数としたいです。
変数版
kennsaku=bc cat test.json | jq '.zzz[] | select(.a=="a${kennsaku}").B'
test.json
{ "zzz" :[ { "A" : "a", "B" : "b" } { "A" : "abc", "B" : "b" } ] }
test.jsonがjsonとして正しくないようです。
また、
cat test.json | jq '.zzz[] | select(.a=="abc").B'
これだとキー 'a' が 'abc' なものを探す、なのですが、これはtest.jsonに含まれてません。
zzz[0].A == 'a' zzz[1].A == 'abc' なので、
・キー部分について、大文字Aと小文字aの間違い
・見つからないことが想定どおりである
どちらかかと思います。
test.json と、およびベタウチコマンド、「想定通りの出力」について確認して、質問を修正してください。
回答としては(質問の想定内容によりますが)おそらくbashがシングルクォートの文字列を変数展開しない事を考慮したコマンドの修正なります。

回答2件
あなたの回答
tips
プレビュー