我有一个关于在bash中的命令中使用函数的问题。 getRegex
是我的功能,它定义在文件的末尾。我想使用的命令如下:Bash在命令中调用函数
COUNT=`grep -rnE 'getRegex' $HOME/new`
现在,我尝试了很多不同的变种,但我不能让它工作,即使我在第2把它分解的方法可以正常工作,如果我把它叫做以下方式:getRegex
。任何想法我失踪? TIA
我有一个关于在bash中的命令中使用函数的问题。 getRegex
是我的功能,它定义在文件的末尾。我想使用的命令如下:Bash在命令中调用函数
COUNT=`grep -rnE 'getRegex' $HOME/new`
现在,我尝试了很多不同的变种,但我不能让它工作,即使我在第2把它分解的方法可以正常工作,如果我把它叫做以下方式:getRegex
。任何想法我失踪? TIA
的关键词来回答是"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
如果你想在另一个bash命令中调用bash命令,内部命令(这里是getRegex)需要用反引号``
括起来,否则它将被解释为文本。既然你在这里反引号,你就需要逃避内线。试试这个:
COUNT=`grep -rnE '\`getRegex\`' $HOME/new`
但是,通过POSIX的奇迹,我们可以使用不同的语法。任何你使用反引号的地方,你也可以使用$()
。因此,为了避免反斜线呕吐,你可以写:
COUNT=$(grep -rnE '$(getRegex)' $HOME/new)
谢谢您的回答,但:'COUNT = $(grep的-rnE '$(getRegex)' $ HOME /新)'回报:'行10:getRegex:命令不found'。 – user1020822
@丹,你看看你的代码真的做了吗?你确定在第二个例子中使用单引号吗? –
dmalikov当然是正确的,那些应该是双引号,因为bash中的单引号不会扩展变量。 – Dan