Bash双方括号

时间:2017-05-12 08:17:05

标签: bash

我需要将配置文件中定义的一些变量与bash中的输入文件进行匹配,并将该变量替换为配置文件输入。

配置文件

var1=value1
var2=value2

输入文件

My user value is [[var1]] and
some lines which does not have configuration variables
My client value is  [[var2]]
some lines which does not have configuration variables

上面第1行和第3行中的var1和var2必须替换为配置文件中的值 其余的线条保持不变。

我能够在关联数组中读取配置,例如mapVals和输入文件到数组说inpArray。

现在我在循环中使用以下代码进行匹配。

for key in "${!mapVals[@]}"
do
        match=\[\[$key\]\]
        echo $match
        let index=0
        for line in "${inpArray[@]}"
        do
            if [[ $line =~ $match ]];
            then
                    echo $line
            fi
            index=$(($index+1))
        done
done

对于[[var1]]和[[var2]]匹配,我获得了line1和line3的匹配。 输出看起来像

[[var1]]
My user value is [[var1]] and
My client value is  [[var2]]

[[var2]]
My user value is [[var1]] and
My client value is  [[var2]]

完全匹配和替换的方式应该是什么。 如果重复请评论。

1 个答案:

答案 0 :(得分:0)

我得到了答案here

所以对于方括号,我们需要使用escape []

the regex for [[var1]] is => [\[][\[]var1]]