변수 정의의 변수

변수 정의의 변수

명령 출력은 변수에 할당됩니다. 예가 있습니다:

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 ... )

아니면 두 단계로,

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

이는 options 와 함께 사용되는 jqJSON 문서를 생성하는 데 사용됩니다 .-dcurl

관련 정보