명령 출력은 변수에 할당됩니다. 예가 있습니다:
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 ... )
아니면 두 단계로,
json=$( jq -nc --arg val "$bb" '{"foo": $val}' )" )
aa=$( curl -d "$json" -H ... )
이는 options 와 함께 사용되는 jq
JSON 문서를 생성하는 데 사용됩니다 .-d
curl