Shell 脚本在返回 CURL 调用的响应负载时省略转义字符

Shell 脚本在返回 CURL 调用的响应负载时省略转义字符

我有一个 shell 脚本进行 cur 调用,该调用返回一个响应 JSON 有效负载,\其中包含一个带有字符的 URL 值,因为它返回像 之类的符号的编码值=。然而,响应的回声正在删除\.有没有办法也获得该角色?

外壳脚本:

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

问题是 shell 的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

相关内容