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

Bash中如何将表达式执行结果正确赋值给变量

错误原因

两处变量赋值的语法均不符合Bash管道与命令替换的规则:

  • cc=$json_data | jq '.country_code':管道仅能传递前一个命令的标准输出,这行的前半段是变量赋值操作,不会输出JSON内容给jq,且管道两端的命令运行在子shell中,赋值操作不会生效到当前shell环境,最终cc为空值。
  • cn=$($json_data | jq '.country_name'):$(...)内部会将内容作为Shell命令执行,此处直接将JSON字符串放在管道起始位置,Shell会把JSON内容识别为要执行的命令,因此触发{"ip":"1.2.3.4",: command not found报错。
正确写法

需要先通过echo/printf输出JSON变量内容,再通过管道传给jq,将完整的管道命令包裹在$(...)内即可将解析结果赋值给变量。如果需要获取不带外层双引号的原始字符串值,可以给jq加-r(raw输出)参数:

#!/bin/bash

json_data='{"ip":"1.2.3.4", "country_code":"GB", "country_name":"United Kingdom"}'

echo "json_data:"
echo "$json_data"

# 完整管道命令放在$()内实现结果赋值,-r参数输出无引号的原始值
cc=$(echo "$json_data" | jq -r '.country_code')
cn=$(echo "$json_data" | jq -r '.country_name')

echo "cc:"
echo "$cc"

echo "cn:"
echo "$cn"
运行结果
json_data:
{"ip":"1.2.3.4", "country_code":"GB", "country_name":"United Kingdom"}
cc:
GB
cn:
United Kingdom

补充说明:引用变量时建议添加双引号,避免JSON内容包含空格、特殊字符时出现参数拆分、通配符展开等异常问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 00:54:32