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

Shell命令替换内使用变量被识别为命令,语法哪里出错了?

写法1报错原因

$()属于命令替换语法,作用是执行括号内的命令,并将命令的标准输出作为替换结果。你在括号内直接写$a,shell会先将变量a的内容展开为{"a": 1},然后尝试把该字符串当做系统命令执行,自然会触发{"a":: command not found的报错。你需要先通过echo命令将变量内容输出到标准输出,再通过管道传递给jq处理。

写法2空值原因

管道符|两侧的命令都会在独立的子shell中运行,子shell内的变量赋值无法同步到父shell。同时该写法只是把$a的值赋值给子shell中的临时变量b,没有任何内容输出到管道,jq拿不到输入也不会返回处理结果,最终父shell中的b自然是空值。

正确实现

兼容POSIX标准的通用写法

b=$(echo "$a" | jq '.a')

注意要给变量$a包裹双引号,避免变量内容中的特殊字符、空格被shell意外解析。

现代shell优化写法(bash/zsh等支持)

使用here string直接将变量内容作为标准输入传给jq,不需要启动额外的echo进程,执行效率更高:

b=$(jq '.a' <<< "$a")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:54:10