2011-10-30 207 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