2015-06-25 71 views
0

那裏, 在我的bash腳本,我定義了一個命令行功能:如何將變量傳遞給自定義函數在bash腳本

rep() { 
find ./ -type f -exec sed -i -e 's/$1/$2/g' {} \; 
} 

源之後的〜/ .bashrc
當我輸入:rep get foo 它不起作用。有人知道這裏發生了什麼嗎?

+0

「它不工作」是非常不確定的。在閱讀答案之前,我認爲你的代碼無法以某種方式定義函數。我在錯誤的軌道上遇到了問題,但隨着[幫助部分](http://stackoverflow.com/help)中的說明放大很多次,您希望下次能夠儘可能具體。 – tripleee

回答

4

sed的's/$1/$2/g'圍繞單引號防止bash的從$1$2函數參數的評估爲字符串 - 您的命令,現在將它換一個文件$1$2

請嘗試使用雙引號代替。

rep() { 
find . -type f -exec sed -i -e "s/$1/$2/g" {} \; 
} 
+0

實際上,OP的嘗試不會交換'$ 1'字面值,因爲正則表達式中的'$'代表行結束。在行結束後顯然沒有任何東西,所以'$ 1'永遠不會匹配任何東西;所以OP的腳本根本不會做任何事情(除了不必要的複製文件)。 – tripleee

相關問題