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

如何在单引号包裹的双引号中获取Bash环境变量值

解决单引号字符串内双引号中环境变量的解析问题

这个问题其实是shell里引号优先级的典型场景——单引号会把所有内容都原样输出,包括$符号,所以直接在单引号包裹的字符串里写变量肯定不会展开。给你几个实用的解决办法,按需选择就行:

方法1:拆分引号拼接

把需要变量展开的部分从单引号里拆出来,用双引号包裹变量(避免变量含特殊字符时出问题),再和单引号包裹的固定内容拼接:

echo '<tag><action name="'$MY_VARIABLE_HERE'" value="'$SECOND_VARIABLE'"/></tag>' > my_text.txt

原理:shell会依次处理每个引号段——单引号里的内容原样保留,双引号(或无引号)里的变量会被解析成对应的值,最后把所有片段拼接成完整字符串。

方法2:外层用双引号,转义内部双引号

如果整个字符串里的特殊符号不多,直接用双引号包裹整个内容,同时把内部原本的双引号用反斜杠转义,这样变量就能正常展开:

echo "<tag><action name=\"$MY_VARIABLE_HERE\" value=\"$SECOND_VARIABLE\"/></tag>" > my_text.txt

原理:双引号允许变量展开,而转义后的\"会被shell解析成普通的双引号,不会和外层的双引号冲突。

方法3:用printf占位符替换(推荐)

这种方法最清晰,尤其是字符串复杂的时候,完全不用纠结引号嵌套的问题:

printf '<tag><action name="%s" value="%s"/></tag>\n' "$MY_VARIABLE_HERE" "$SECOND_VARIABLE" > my_text.txt

原理:printf的%s是字符串占位符,后面的变量会依次替换占位符,而且变量用双引号包裹能保证特殊字符(比如空格、引号)被正确处理,最后\n用来输出换行符,和echo的行为一致。

这三种方法都能达到你想要的效果,其中方法3在处理复杂字符串或变量含特殊字符时最可靠,方法1和2则更适合简单场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 18:47:26