Sed 字符(“”)不会穿过循环

Sed 字符(“”)不会穿过循环

我编写了一些脚本,用于从数组中抓取字符串并将其重播到文件中。这里的问题是特殊字符不会通过。有什么想法吗?

#!/bin/bash/
NewParameters=(
scservice.memberServiceEndpoint="http://mywebhere.com"
scservice.memberServiceConpoint="http://example.com"
play.modules.disabled += "play.data.format.FormattersModule"
)

file=/home/conf.conf

for i in "${NewParameters[@]}"                                                           
do
     before=$(printf "%s\n" $i | awk -F'=' '{print $1}')                              
        after=$(printf "%s\n" $i | awk -F'=' '{print $2}')                               
            sed -i "s@$before=.*@$before=$after@g" $file
done

输出结果:

scservice.memberServiceEndpoint=http://mywebhere.com
scservice.memberServiceConpoint=http://example.com
play.modules.disabled += play.data.format.FormattersModule

答案1

在“引号删除”阶段,shell 会在赋值时删除引号(man bash有关详细信息,请参阅)。用反斜杠标记双引号,或用单引号标记整个元素。此外,NewParameters 中的最后一行实际上是用空格分隔的三个元素;同样,如果您想将所有内容放在一个元素中,请用反斜杠标记空格或将整行括在单引号中。

相关内容