You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JQ处理Curl请求输出:多结果单行打印与带空格值拆分异常

解决JQ输出空格拆分问题

根本原因

你使用echo $(...)的写法时,bash会将命令输出里的换行、空格全部视为字段分隔符,导致带空格的"Google Servers"被拆成两个独立字段,错误分配给var3和var4。

解决方案

方案1:用JQ输出Shell安全格式,配合read读取

让JQ自动为带空格的字段添加引号,确保bash读取时不会拆分:

read var1 var2 var3 var4 < <(curl -s "https://example.com/api/json/APIKEY/$ip" | jq -r '@sh "\(.proxy) \(.vpn) \(.ISP) \(.timezone)"')
  • -r:输出原始字符串(不带转义引号)
  • @sh:自动为含空格/特殊字符的字段包裹单引号,符合Shell语法规范

方案2:用JQ输出CSV格式,按逗号分隔读取

如果字段不含逗号,这个方法更稳妥:

IFS=, read var1 var2 var3 var4 < <(curl -s "https://example.com/api/json/APIKEY/$ip" | jq -r '[.proxy,.vpn,.ISP,.timezone] | @csv')
  • [.proxy,.vpn,.ISP,.timezone]:将目标字段打包成JSON数组
  • @csv:把数组转为CSV格式,带空格的字段会被双引号包裹
  • IFS=,:指定read用逗号作为字段分隔符

方案3:让JQ输出单行无格式结果

如果不需要引号,直接让JQ输出紧凑单行内容:

read var1 var2 var3 var4 < <(curl -s "https://example.com/api/json/APIKEY/$ip" | jq -c '[.proxy,.vpn,.ISP,.timezone]' | tr -d '[]"')
  • -c:输出紧凑JSON数组(如[true,true,"Google Servers","America/Los_Angeles"])
  • tr -d '[]"':移除数组的括号和引号,得到空格分隔的纯文本

验证方式

赋值完成后,直接打印变量即可确认结果:

echo "var1: $var1"
echo "var2: $var2"
echo "var3: $var3"
echo "var4: $var4"

此时var3会完整显示Google Servers,不会被拆分。

内容的提问来源于stack exchange,提问作者user20342916

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 14:30:43