次の属性を含む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
削除されます。ご覧のとおり、そこに入力するコマンドによってはかなり深刻なダメージを与える可能性があります。