2014-10-29 4 views
1

jq를 사용하여 JSON 데이터를 구문 분석하고 명령 줄 인수로 제공된 동적 키 값을 기반으로 값을 추출합니다. 나는 이것이 작동한다는 것을 알았지 만, 작은 따옴표 안에서 $v을 보간하는 방법에 대해 회의적입니다. 식 '.["\($v)"]'을 큰 따옴표 안에 다시 쓰는 것이 가능합니까? 내가 도대체 ​​뭘 잘못하고있는 겁니까?jp를 사용하여 보간 문자열 사용

어떤 이유로 작동하지 않습니다 다음 시도 :

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

그러나, 이것은 않습니다 : 당신은 $v을 탈출하지 않은

recipe_key='Wilted Greens' # example key to interpolate 

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

두 사람 모두 맞고 문제에 대한 두 가지 시각을 얻을 수있었습니다. 초점을 맞추는 가장 중요한 이유는 큰 따옴표를 사용하는 길을 계속해서 그로부터 답을 얻는 것이 잘못되었다는 것입니다. 그것이 Stackoverflow를 훌륭하게 만듭니다. 확실한 답변을 얻는 것보다는 답변에 도달하는 것이 중요합니다. – theGrayFox

+0

"좋은"과 "나쁜"에 대해서는 아무 말도하지 않았습니다. 나는 작은 따옴표가 그가 피하려고했던 것과 정확히 일치하는 보간을 피하고 어떤 보간이 그가 올린 정확한 * 문제인지를 알기 위해 왜 OP가 큰 따옴표를 사용하기를 원하는지에 대한 이해가 부족함을 지적했다. –

+0

@EtanReisner 내 요점은 중요하지 않다는 것입니다. ** 그가 ** 나쁜 방식으로하고 싶어하는 이유입니다. 내가 그랬던 것처럼 그에게 "나쁜"방법을 보여 주며, 원할 경우 "더 나은"방법을 제시하고 결정하게하십시오. –

답변

2

, 배쉬는 그것이 강타이라고 생각 때문에 변수, 아마도 빈 변수. 제 생각에는이

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

을 시도 , 그것은 작은 따옴표를 사용 --arg을 사용하려면이 상황에서 더 낫다. --arg은 awk -v과 유사하게 구현되어이 문제를 인용 두통과 함께 정확하게 수정했습니다.

+0

아들. 나는이 권리를 얻기 위해 수 시간을 보냈다. 어떻게 bash 변수로 생각하고 있었습니까? 또한,이 방법을 사용하면 작은 따옴표를 사용하는 것보다 감각이 더 좋다고 느낍니까? – theGrayFox

+0

+1 Steven에게 감사드립니다. 이것에 대한 제 2의 의견이 정말로 필요했고 당신이 말하는 것이 훨씬 의미가 있습니다. – theGrayFox

1

나는 이것이 작동하는 것으로 나타 났지만, 작은 따옴표 안에서 $ v를 어떻게 보간하는지에 회의적입니다.

따옴표 변수를 보간 또는 아무것도를 평가하지 않습니다.

Nothing은 작은 따옴표 안에 있습니다. 작은 따옴표 안에서 작은 따옴표를 벗어날 수도 없습니다.

작은 따옴표 대신 큰 따옴표를 사용하려는 경우에만 인용/이스케이프 문제가 발생합니다.