2011-10-30 205 views
3

我有一個關於在bash中的命令中使用函數的問題。 getRegex是我的功能,它定義在文件的末尾。我想使用的命令如下:Bash在命令中調用函數

COUNT=`grep -rnE 'getRegex' $HOME/new` 

現在,我嘗試了很多不同的變種,但我不能讓它工作,即使我在第2把它分解的方法可以正常工作,如果我把它叫做以下方式:getRegex。任何想法我失蹤? TIA

回答

3

的關鍵詞來回答是"bash command substitution",你會發現在man bash或谷歌。

順便說一句,雙引號在這裏真的很重要。

#!/bin/bash 

function my_func() { 
    echo "no" 
} 

string="no you don't 
no you don't 
no you don't 
no you don't 
no you don't" 


COUNT="$(echo "${string}" | grep "$(my_func)" -c)" 
echo "${COUNT}" 

而且

$> ./ok.sh 
5 
0

如果你想在另一個bash命令中調用bash命令,內部命令(這裏是getRegex)需要用反引號``括起來,否則它將被解釋爲文本。既然你在這裏反引號,你就需要逃避內線。試試這個:

COUNT=`grep -rnE '\`getRegex\`' $HOME/new` 

但是,通過POSIX的奇蹟,我們可以使用不同的語法。任何你使用反引號的地方,你也可以使用$()。因此,爲了避免反斜線嘔吐,你可以寫:

COUNT=$(grep -rnE '$(getRegex)' $HOME/new) 
+0

謝謝您的回答,但:'COUNT = $(grep的-rnE '$(getRegex)' $ HOME /新)'回報:'行10:getRegex:命令不found'。 – user1020822

+0

@丹,你看看你的代碼真的做了嗎?你確定在第二個例子中使用單引號嗎? –

+0

dmalikov當然是正確的,那些應該是雙引號,因爲bash中的單引號不會擴展變量。 – Dan