Bash在命令中调用一个函数

时间:2011-10-30 15:47:44

标签: bash

我对bash中的命令中的函数用法有疑问。 getRegex是我的函数,它在文件的末尾定义。我想要使​​用的命令如下:

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

现在我尝试了很多不同的变体,但我无法使其工作,即使我将其拆分为2.如果我按以下方式调用它,该方法也能正常工作:getRegex。知道我错过了什么吗? TIA

2 个答案:

答案 0 :(得分:3)

要回答的关键词是"bash command substitution",您可以在man bash或Google中找到。

顺便说一句,双引号在这里非常重要。

#!/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

答案 1 :(得分:0)

如果您尝试在另一个bash命令中调用bash命令,则需要将内部命令(此处为getRegex)括在反引号``中,否则它将被解释为文本。因为你在这里会有反推内线,所以你需要逃避内线反叛。试试这个:

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

但是,通过POSIX的奇迹,我们可以使用不同的语法。在使用反引号的任何地方,您也可以使用$()。所以为了避免反斜杠呕吐,你可以写:

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