オプション1:名前でのみ変数を読み取る

オプション1:名前でのみ変数を読み取る

次の属性を含むJSONファイルがあります。

{
  "environment": "$USER"
}

jq以下を使用して値を抽出します。

ENVIRONMENT="$(jq -r '.environment' "properties.json")"

私が望む値はENVIRONMENT私のユーザー名です。いいえ文字列$USER- これは可能ですか?

ベストアンサー1

オプション1:名前でのみ変数を読み取る

bash変数を参照する変数を持つことができます。たとえば、次のようになります。

REF='USER'  # or get it from JSON
echo "${!REF}"
# prints current username

したがって、次のように書くことができます。

ENVIRONMENT_REF="$(jq -r '.environment' "properties.json")"
ENVIRONMENT="${!ENVIRONMENT_REF}"

JSONコンテンツ:

"environment": "USER"

オプション2:フルシェル拡張

他のオプションがより良いかもしれません(しかし絶対に安全ではありません。)以下を使用していますeval

ENVIRONMENT="$(eval "echo $(jq -r '.environment' "properties.json")")"

これは安全ではないまた、JSONファイルにマルウェアを挿入する可能性があります。どのマルウェアですか?このファイルを見てみましょうproperties.json

{
    "environment": "$(rm some_file)" 
}

シェルはeval次のコードを使用します。

echo $(rm some_file)

...指定されたファイルがsome_file削除されます。ご覧のとおり、そこに入力するコマンドによってはかなり深刻なダメージを与える可能性があります。

おすすめ記事