我有一个类似的功能:
getServers() {
curl -s -X GET ...
}
输出是一个复杂的JSON字符串。我可以这样解析JSON:
serverId=$(getServers | jq -r ".[] | select(whatever...)")
echo $serverId
但是,如果我将函数调用的输出存储在变量中,则会出现错误:
servers=$(getServers)
echo $servers | jq .
# jq can not process this
# parse error: Invalid string: control characters from U+0000 through
echo "$servers" | jq .
# does not work either
U + 001F必须在行...处转义
即使我$servers
包含与函数调用相同的值,jq
也无法对其进行处理。这是怎么回事?
$ jq --version
jq-1.5
更新(answer)
使用注释中的提示(set -x
),我注意到变量包含\r\n
。使用https://stackoverflow.com/a/19345906/1927695,我可以解决此问题:
echo $servers | tr '\r\n' ' ' | jq .
错误提示,jq
不喜欢控制字符。