コマンド出力は変数に割り当てられます。例があります:
aa=`curl -d '{"foo":42}' -H "Content-Type: <...>" -X POST http://... | some-cmd | other-cmd`
以下では、数値をパラメータ化する必要があります'{"foo":42}'
。
bb=42
bb
defの変数を使用してください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で使用されるjq
JSONドキュメントを生成するために使用されます。-d
curl