bash:sed:变量中的正则表达式

问题描述:

我对以下脚本感到非常疯狂。bash:sed:变量中的正则表达式

下面的命令按预期工作:

echo a | sed 's/a/b/' 

输出:

b 

但是这个脚本并不:

test="'s/a/b/'" 
echo a | sed $test 

输出:

sed: -e expression #1, char 1: unknown command : `'' 

我真的应该是愚蠢的,但我没有看到我失落的东西。

感谢,

这是因为你的双包装你的字符串。 test="'s/a/b'"。 Sed然后得到's/a/b/'作为文字字符串。你只希望sed收到s/a/b/
您只需将中的字符串包装在一组引号中,否则内部引号集将被解释为参数的一部分。

你可能希望这样的:

kent$ test="s/a/b/"   

kent$ echo a | sed ${test} 
b 

kent$ echo a | sed $test 
b 

test=s/a/b/ 

test="'s/a/b/'" 
echo a | sed $test 

等同于:

test="'s/a/b/'" 
echo a | sed "'s/a/b/'" 

显然sed不理解既"'命令,它解释'为命令。您可以使用其中的任何一个:

test='s/a/b/' 

或者

test='s/a/b/'