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

单引号包裹时变量未替换:如何在Shell脚本中填充$FIRST_NAME到X?

解决Shell脚本中变量在单引号字符串里不替换的问题

嘿,这个问题我太熟悉啦!你遇到的核心问题是Shell里单引号和双引号的引用规则:Shell会把单引号包裹的内容完全当作字面量,里面的任何变量、特殊字符都不会被解析,所以$FIRST_NAME自然不会被替换成它的值。

给你两种简单好用的解决方法:

方法一:用双引号包裹整个字符串,转义内部双引号

把定义X的单引号改成双引号,同时把字符串里的双引号用反斜杠转义,这样Shell会解析变量,同时保留JSON里的双引号:

#!/bin/sh
FIRST_NAME='test'
X="{\"firstname\": \"$FIRST_NAME\"}"
echo $X

运行后会输出:{"firstname": "test"}

方法二:单引号+双引号拼接字符串

如果不想转义双引号,可以把字符串拆成几部分,用单引号包裹不需要解析的固定内容,用双引号包裹需要解析变量的部分,然后直接拼接:

#!/bin/sh
FIRST_NAME='test'
X='{"firstname": "'"$FIRST_NAME"'"}'
echo $X

这里的逻辑是:

  • '{"firstname": "':单引号包裹的固定字符串开头
  • "$FIRST_NAME":双引号包裹的变量,会被替换成实际值
  • '"}':单引号包裹的固定字符串结尾
    三者拼接后就得到了正确的JSON字符串,输出结果和方法一完全一致。

如果你的FIRST_NAME变量里包含空格、引号这类特殊字符,可能需要用printf做更严谨的格式化,但如果是普通的简单字符串,上面两种方法完全够用啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:38:36