我想一個sed命令開始存儲這樣的變量中:bash命令可變
sedcmd="sed -i '' "
後來我則像這樣執行命令:
$sedcmd s/$orig_pkg/$package_name/g $f
而且它不沒有工作。使用bash -x運行腳本,我可以看到它正在展開如下:
sed -i ''\'''\'''
表達此問題的正確方法是什麼?
我想一個sed命令開始存儲這樣的變量中:bash命令可變
sedcmd="sed -i '' "
後來我則像這樣執行命令:
$sedcmd s/$orig_pkg/$package_name/g $f
而且它不沒有工作。使用bash -x運行腳本,我可以看到它正在展開如下:
sed -i ''\'''\'''
表達此問題的正確方法是什麼?
定義一個shell函數:
mysed() {
sed -i "" "[email protected]"
}
,並調用它像這樣:
$ mysed s/$orig_pkg/$package_name/g $f
我錯過了@larsmans在他的回答結束時提出這個建議。 – chepner 2013-05-08 14:31:52
沒關係,+1給你。 – 2013-05-08 15:35:54
這是做
alias sedcmd="sed -i ''"
顯然記住,當你閉上你的bash,這個別名將會消失的正確途徑。
如果您想使其成爲「永久性」,則必須將其添加到您的.bashrc
主文件(如果您只想爲單個用戶創建此文件)或.bashrc
全局文件中,如果您想讓它適用於所有用戶
它的工作原理時,該命令只有一個字長:
$ LS=ls
$ $LS
但在你的情況,外殼嘗試執行程序sed -i ''
,它不存在。
的解決方法是使用$SHELL -c
:
$ $SHELL -c "$LS"
total 0
(而不是$SHELL
,你也可以說bash
,但是當有多個擊安裝這不完全可靠的,外殼是不實際的Bash等。)
然而,在大多數情況下,我會實際使用shell函數:
sedcmd() {
sed -i '' "[email protected]"
}
不太確定你想要做什麼,但我的建議是:
sedcmd="sed -i "
$sedcmd s/$orig_pkg/$package_name/g $f
你必須在你的shell首先設置變量orig_pkg
package_name
和f
。
如果你在一個文件替換變量名,嘗試:
$sedcmd s/\$orig_pkg/\$package_name/g $f
不過f
必須設置爲你的工作文件名。
參見[BashFAQ#50:我想在一個變量把一個命令,但是複雜的情況下總是失敗!](http://mywiki.wooledge.org/BashFAQ/050)。 – 2013-05-08 14:32:11