쉘 스크립트는 CURL 호출의 응답 페이로드를 반환할 때 이스케이프 문자를 생략합니다.

쉘 스크립트는 CURL 호출의 응답 페이로드를 반환할 때 이스케이프 문자를 생략합니다.

\와 같은 기호의 인코딩된 값을 반환하므로 문자가 포함된 URL 값이 포함된 응답 JSON 페이로드를 반환하는 cur 호출을 만드는 쉘 스크립트가 있습니다 =. 그런데 응답의 에코가 제거되고 있습니다 \. 해당 역할도 얻을 수 있는 방법이 있나요?

쉘 스크립트:

curl -k -w "\n%{http_code}" -S -s -X GET \
            -H "Accept: application/json" \
            -u "<<Auth>>" \
"https://<<url>>" | {
    read body
    read code
    
    if [ "x$code" = "x200" ]
    then
      echo "$body" 
    else
      echo "ERROR:$code:$body"
    fi
}

대답은 이렇습니다.

{"param1":"val1","param2":{"p1":"v1","p2":"v2", "URL":"<<someString>>//<<host>>:<<port>>;extenstionu003dValue"}}

실제로 URL 값의 마지막 부분은 이지만 extension=value인코딩된 값을 반환할 때는 을 반환해야 합니다 \u003d. 껍질이 잘리고 있습니다 \. 누군가 \답글에 이 내용을 포함하는 방법을 제안해 줄 수 있나요 ?

답변1

문제는 쉘의 read내장 기능이 이를 \이스케이프 문자로 취급한다는 것입니다(비록 \u특별한 의미가 없기 때문에 리터럴이 됨 u).

$ printf '%s\n' 'extension\u003dvalue' | { read body; echo "$body"; }
extensionu003dvalue

다음 옵션을 사용하여 백슬래시 처리를 끌 수 있습니다 -r.

$ printf '%s\n' 'extension\u003dvalue' | { read -r body; echo "$body"; }
extension\u003dvalue

관련 정보