3

jq を使用して JSON データを解析し、コマンド ライン引数として指定された動的キー値に基づいて値を引き出しています。これが機能することに気付きましたが$v、一重引用符内でどのように補間されているかについては懐疑的です。'.["\($v)"]'二重引用符内の式を書き換えることは可能ですか? 私は何を間違っていますか?

次のことを試しても、何らかの理由で機能しません。

recipe_url=$(cat ./*.json | jq -r --arg v "$recipe_key" ".[\"\\($v)\"]")

ただし、これは次のことを行います。

recipe_key='Wilted Greens' # example key to interpolate

recipe_url=$(cat ./*.json | jq -r --arg v "$recipe_key" '.["\($v)"]') # works!
4

2 に答える 2

2

をエスケープしていない$vため、Bash はそれが Bash 変数であり、おそらく空の変数であると考えます。これを試して

".[\"\\(\$v)\"]"
#       ^
#       |
#       --- notice

私の意見では、この状況では一重引用符で使用する方が良いでしょう--arg--argawk と同様に実装され-v、この種の状況を正確に引用して頭痛を修正しました。

于 2014-10-30T00:25:58.653 に答える
1

これが機能することに気付きましたが、単一引用符内で $v をどのように補間するかについては懐疑的です。

一重引用符は、変数を補間したり、他のものを評価したりしません。

一重引用符内に魔法はありません。一重引用符内で一重引用符をエスケープすることさえできません。

ここで単一引用符の代わりに二重引用符を使用しようとしているという理由だけで、あなたが抱えている引用/エスケープの問題が存在します。

于 2014-10-30T01:14:41.227 に答える