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

如何在sed命令中让一个变量展开、另一个保持原样不展开?

解决sed中部分变量展开、部分保留原变量名的问题

方法1:拼接单双引号拆分sed脚本

Shell中,单引号包裹的内容不会被变量展开,双引号包裹的内容会触发变量展开。你可以把需要求值的$var1放在双引号段,需要保留原变量名的$var2放在单引号段,让Shell自动拼接成完整的sed命令:

var1="should be evaluated"
var2="should not be evaluated"
echo "$var1" | sed "s|$var1|"'$var2'|"

执行后输出为:$var2。

原理:sed脚本被拆成两部分——双引号内的"s|$var1|"会让Shell把$var1展开为实际值,单引号内的'$var2'会保持原字符串不变,最终组合成sed可识别的完整命令:s|should be evaluated|$var2|。

方法2:在双引号中转义$符号

如果想用完整的双引号包裹sed脚本,只需给不需要展开的变量前的$加反斜杠转义,让Shell把它当作普通字符处理:

var1="should be evaluated"
var2="should not be evaluated"
echo "$var1" | sed "s|$var1|\$var2|g"

这里的\$var2会被Shell解析为$var2字符串,不会展开var2的实际值,最终输出同样是$var2。

注意事项

如果var1中包含sed使用的分隔符(比如示例里的|),需要先对var1内的特殊字符转义,否则sed会报错。可以用以下命令生成转义后的变量:

escaped_var1=$(printf '%s' "$var1" | sed 's/[|]/\\&/g')

之后用$escaped_var1替换sed命令中的$var1即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 16:07:50