我對以下腳本感到非常瘋狂。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 : `''
我真的應該是愚蠢的,但我沒有看到我失落的東西。
感謝,
我對以下腳本感到非常瘋狂。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/'