Unix嵌套参数解析:如何单行解析变量值并赋值给新参数
在Bash中解析变量内的环境变量并赋值给新变量
问题背景
在Unix环境执行以下代码:
export ABC=1 a="RESOLVED VALUE IS : ( \$ABC )" echo $a
输出结果:
RESOLVED VALUE IS : ( $ABC )
需求
解析变量a中的ABC环境变量值,将最终解析结果赋值给新变量b。
尝试的方法及报错
使用eval命令尝试实现时触发语法错误:
$ b=$(eval echo $a) -bash: eval: line 1: syntax error near unexpected token `(' -bash: eval: line 1: `echo RESOLVED VALUE IS : ($ABC)'
原因是$a展开后,括号会被Shell当作语法结构处理,从而触发错误。
已实现的两步法(依赖临时文件)
通过临时文件可实现需求:
echo $a > temp.dat b=$(envsubst < temp.dat) echo $b
正确输出:
RESOLVED VALUE IS : (1)
单行解决方案(无需临时文件)
直接通过管道将变量内容传给envsubst即可实现单行操作,同时用双引号包裹$a避免特殊字符被Shell拆分:
b=$(echo "$a" | envsubst)
也可以用printf替代echo,规避部分场景下echo的转义问题:
b=$(printf "%s" "$a" | envsubst)
执行后b的值即为解析后的结果,直接echo $b就能得到正确输出。
内容的提问来源于stack exchange,提问作者Rowdy
相关产品推荐
相关产品推荐

