変数定義の変数

変数定義の変数

コマンド出力は変数に割り当てられます。例があります:

aa=`curl -d '{"foo":42}' -H "Content-Type: <...>" -X POST http://... | some-cmd | other-cmd`

以下では、数値をパラメータ化する必要があります'{"foo":42}'

bb=42

bbdefの変数を使用してくださいaa。次の壊れた例は私が必要とするものを示しています

aa=`curl -d '{"foo":$bb}' -H "Cont ... <and so the same>

入れ子になった変数定義を正しい方法で書き換えるには?

ベストアンサー1

一重引用符は、シェルが変数を拡張するのを防ぎます。代わりに二重引用符を使用してください。

引用する必要のないJSON値の場合:

aa=$( curl -d "{\"foo\": $bb}" -H ... )

または、

aa=$( curl -d '{"foo":'"$bb"'}' -H ... )

変数の値をJSONでエンコードする必要がある場合(一部の文字列は可能です)、JSONパーサーに値参照を決定させたい場合(通常はユーザー入力などの外部ソースから読み取ったデータを送信する場合は必要です)。

aa=$( curl -d "$( jq -nc --arg val "$bb" '{"foo": $val}' )" -H ... )

または2段階で、

json=$( jq -nc --arg val "$bb" '{"foo": $val}' )" )
aa=$( curl -d "$json" -H ... )

これは、optionsで使用されるjqJSONドキュメントを生成するために使用されます。-dcurl

おすすめ記事