我有一个 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