1. ホーム
  2. json

[解決済み] bashの変数をjqに渡す

2022-04-22 07:18:56

質問

から特定の値を取得するスクリプトを書きました。 file.json . jq に値を指定すると動作します。 select が、この変数は機能しないようです(あるいは使い方がわからない)。

#!/bin/sh

#this works ***
projectID=$(cat file.json | jq -r '.resource[] | select(.username=="[email protected]") | .id')
echo "$projectID"

[email protected]

#this does not work *** no value is printed
projectID=$(cat file.json | jq -r '.resource[] | select(.username=="$EMAILID") | .id')
echo "$projectID"

解決方法は?

シェル変数(EMAILID)をjq変数として渡すことも考えてみましょう(ここでは説明のためにEMAILIDも)。

   projectID=$(jq -r --arg EMAILID "$EMAILID" '
        .resource[]
        | select(.username==$EMAILID) 
        | .id' file.json)

ポストスクリプト

ちなみに、もう一つの可能性は、jqの env 関数を使って環境変数にアクセスすることができます。 例えば、次のような一連のbashコマンドを考えてみましょう。

[email protected]  # not exported
EMAILID="$EMAILID" jq -n 'env.EMAILID'

出力はJSON文字列です。

"[email protected]"