2017-11-28 13 views
0

다음 컬 사용은 중괄호 안에 중괄호를 선호하지 않습니다. 나는 도망 쳤다. 그러나 그것은 도움이되지 않았다. .. 어떤 생각?bash에서 curl을 사용할 때 중괄호 사용 오류

echo "$(curl -s -u ${USERNAME}:${PASSWORD} GET ${hostName}/${path}.json| jq -r -c '[.field1,.field2] | \"(.[0]) ,(.[1])"')" 

결과이 같은 디버그 경우에

jq: error: syntax error, unexpected INVALID_CHARACTER (Unix shell 
quoting issues?) at <top-level>, line 1: 

error near (.[0]`)` 
+2

'echo "$ (some commands)"는 거의 항상 실수이며, 여기서 인용하는 것을 복잡하게 만듭니다. 명령을 직접 실행하고 캡처를 건너 뛰고 결과를 반향하지 않는 이유는 무엇입니까? –

+1

무엇을'\ "(. [0]), (. [1])"'할까요? – tripleee

+0

중괄호가 필요하지 않다는 것을 알고 있습니까? 다음 문자가 유효한 변수 이름의 일부인 경우에만 필요합니다. 위와 같이 큰 따옴표 하나만 이스케이프 처리해야하는 이유를 모르십니까? – grail

답변

1

, 그것은 먼저 기본 구성 요소들로 일을 중단하는 것이 가장 좋습니다. 귀하의 경우에, 나는 당신이이기 위하여 JQ 필터를 구성 추측에는 요 :

[.field1,.field2] | "\(.[0]), \(.[1])" 

테스트하려면 : 당신이 그 부분을 오른쪽으로 일단

jq -r -c '[.field1,.field2] | "\(.[0]), \(.[1])"' 
{"field1": 1, "field2": 2} 
1, 2 

가, 나머지는 간단합니다. 알맞은 셸을 사용한다고 가정하면 "$()"이 아닌 $()을 사용하거나 명령 대체를 완전히 피함으로써 자신을 단순하게 만들 수 있습니다.

보기의 개발 및 테스트 관점에서

, 순서에 당신이 파일에 올바른 것으로 알고 program.jq을 말하는 JQ 프로그램을 넣어 적합 할 수 있습니다, 그리고 당신은 할 수 있습니다

(A) 독립 실행 형 모드에서 확인하십시오. jq -r -c -f program.jq

(b) 파이프 라인에 jq 호출을 연결하여 다른 곳에 문제가 없는지 확인하십시오.

program.jq를 사용하는 것이 궁극적으로 만족스럽지 않으면 jq 프로그램에 쉘 변수를 설정하는 것이 좋습니다.

JQ='[.field1,.field2] | "\(.[0]), \(.[1])"' 

echo $(jq -r -c "$JQ") 

물론 마지막 줄은 테스트 용입니다. 어쩌면 심지어 $()이 필요하지 않을 수도 있습니다.

+0

고마워요 ...이 젠킨스 껍질을 사용하고 있었는데 ... 빨간색으로 글꼴을 강조했을 때 착각했습니다.하지만. 효과가있다. – codeexplorer