2012-12-17 87 views
1

我對以下腳本感到非常瘋狂。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 : `'' 

我真的應該是愚蠢的,但我沒有看到我失落的東西。

感謝,

回答

1

這是因爲你的雙包裝你的字符串。 test="'s/a/b'"。 Sed然後得到's/a/b/'作爲文字字符串。你只希望sed收到s/a/b/
您只需將中的字符串包裝在一組引號中,否則內部引號集將被解釋爲參數的一部分。

1

你可能希望這樣的:

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

kent$ echo a | sed ${test} 
b 

kent$ echo a | sed $test 
b 

test=s/a/b/ 
2
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/'