Sed:如何将反向引用转换为变量名?

时间:2012-07-19 06:40:29

标签: regex sed

你知道如何在sed中使用反向引用作为变量名吗?

我尝试了什么:

#!/bin/bash
var_one=x
var_two=y
var_three=z
echo "var_one + var_two = var_three" | sed -e "s/\(var_[^\ ]*\)/$\1/g"

我得到了什么:

$var_one + $var_two = $var_three

我想得到什么:

x + y = z

1 个答案:

答案 0 :(得分:3)

使用Eval展开变量

目前还不清楚你真正要做的是什么,但是如果你想做的只是创建字符串中的一些变量,然后评估字符串以扩展变量,那么你想要使用 eval 。例如:

#!/bin/bash
var_one=x
var_two=y
var_three=z
result=$(
    echo "var_one + var_two = var_three" |
    sed -e "s/\(var_[^\ ]*\)/$\1/g"
)
eval "echo $result"

使用 eval 涉及很多陷阱。但是,这段代码肯定解决了你所描述的问题。