传递正则表达式作为参数

Passing regular expression as parameter

我正在尝试将正则表达式作为参数传递。我应该在我的代码中修复什么? 我的目标是发送 find 和正则表达式字符串,然后在参数上使用 grep 这样我就可以用 grep 找到的内容做任何我想做的事情(打印出现次数) .

这是我发送的:

$ ./lab12.sh find [Gg]reen

这是我的 bash 代码:

if [[ "" == "find" ]]
then
    declare -i cnt=0
    for file in /tmp/beatles/*.txt ; do
        if [[ grep -e  ]]  //problem is here...
        then
            ((cnt=cnt+1))
        fi
    done
    echo "$cnt songs contain the pattern """
fi        

if 语句接受一个命令。 [[ 是一个,grep 是另一个,写 [[ grep ... ]] 本质上和写 vim grepcat grep 等一样错误,只需使用:

if grep -q -e "$pattern"
then
  ... 

相反。

grep 的 -q 开关将禁用输出,但当模式匹配时将退出状态设置为 0(成功),否则为 1(失败),if 语句将只执行 then如果命令成功则阻止。

使用 -q 将允许 grep 在第一行匹配时立即退出。

一如既往,请记住将参数扩展用双引号引起来,以避免 pathname expansion and wordsplitting.

请注意,方括号 [...] 将由您的调用 shell 解释,您应该将它们转义,或者将整个模式用引号引起来。

始终建议使用单引号,因为唯一的特殊字符是另一个单引号。

$ ./lab12.sh find '[Gg]reen'