【发布时间】:2022-01-17 14:52:19
【问题描述】:
我正在尝试将正则表达式作为参数传递。我应该在我的代码中修复什么?
我的目标是发送find 和正则表达式字符串,然后在参数上使用grep,这样我就可以对grep 找到的内容做任何我想做的事情(打印出现次数)。
这是我发送的:
$ ./lab12.sh find [Gg]reen
这是我的 bash 代码:
if [[ "$1" == "find" ]]
then
declare -i cnt=0
for file in /tmp/beatles/*.txt ; do
if [[ grep -e $2 ]] //problem is here...
then
((cnt=cnt+1))
fi
done
echo "$cnt songs contain the pattern "$2""
fi
【问题讨论】:
-
方括号是 glob 语法(通配符)的一部分
-
如果您的当前目录中有任何以
G或g开头的文件,则会产生不良结果(会发生路径名扩展)。如果不是,它不会被修改为[Gg]reen。为了产生理想的结果,单引号整个字符串 -
此外,不匹配的模式被逐字处理只是
bash的默认 行为。您也可以将其配置为引发错误 (shopt -s failglob) 或消失 (shopt -s nullglob)。 -
看看shellcheck.net。它是一个 shell 脚本验证器,还会发现可能导致您出现问题的做法。另见wizardzines.com/comics/shellcheck