我对bash中的命令中的函数用法有疑问。 getRegex
是我的函数,它在文件的末尾定义。我想要使用的命令如下:
COUNT=`grep -rnE 'getRegex' $HOME/new`
现在我尝试了很多不同的变体,但我无法使其工作,即使我将其拆分为2.如果我按以下方式调用它,该方法也能正常工作:getRegex
。知道我错过了什么吗? TIA
答案 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)