2014-06-26 31 views
1

在試圖寫上Ubuntu的一個bashscript我遇到了以下問題來了:sed的:使用變量命令和地址

iconname="'application:\/\/nautilus.desktop'" 
echo "iconname: $iconname" 
sedvariable=\"s/$iconname[,]*//\" 
echo "sedvariable: $sedvariable" 
settings get com.canonical.Unity.Launcher favorites | sed ${sedvariable} 

我總是得到一個錯誤說「未知命令」

sed: -e Ausdruck #1, Zeichen 1: Unbekannter Befehl: `"' 

然而,變量「sedvariable」看起來不錯這樣的:

sedvariable: "s/'application:\/\/nautilus.desktop'[,]*//" 

當手動我輸入命令t工作得很好

gsettings get com.canonical.Unity.Launcher favorites | sed "s/'application:\/\/nautilus.desktop'[,]*//" 

爲什麼sed不接受來自我的變量的命令?感謝您的任何建議!

+0

的sed不會讓整個命令在單個變量被壓縮。 –

+0

sed將不會允許 設置獲得com.canonical.Unity.Launcher收藏夾| sed「s/$ iconname [,] * //」 neighter – user3780567

+0

我沒有看到你在哪裏使用'sedvariable'。 'gsettings'命令行中不會出現'sedvariable'和'iconname'。 – Kaz

回答

1

請試試這個

  sedvariable="-e s/$iconname[.]*//" 
      gsettings get com.canonical.Unity.Launcher favorites | sed "$sedvariable" 
+0

非常感謝!這完美的作品!爲什麼sed不能像原來那樣使用我的變量?是否有任何明顯的原因,我失蹤或只是一個特定於sed的事情? – user3780567

+0

@ user3780567正如我所看到的,圍繞'sed'表達式的雙引號將被bash解釋(它們大致意思是:「不要將此字符串拆分爲空格)」。使用'sedvariable = \'s/$ iconname [,] * // \「',您可以轉義雙引號,使它們成爲變量中包含的字符串的一部分。當執行'sed $ {sedvariable}'時,你的shell解析引號,然後執行變量替換,剩下的引號被賦給'sed'。就好像你寫了'sed'「s/$ iconname [,] * //」''。 – Qeole