我正在尝试通过对 -?
、-h
或 --help< 进行 egrepping 来检查是否已将帮助开关传递到我的程序
。如果没有,我只是将所有内容转发给另一个脚本,如下所示:
if echo "$*" | egrep -q -- '-?|-h|--help'; then
help
exit 0
fi
exec another/script "$@"
出于某种原因,这似乎不适用于我的系统。我追踪到 egrep
成功返回空字符串搜索的事实,例如这将打印 0
:
echo '' | egrep -q -- '-?|-h|--help'
echo $?
为什么会发生这种情况,我该如何解决?谢谢!
编辑: 还注意到虽然此命令会成功:
echo -h | egrep -- -?
echo $? # 0
将它与常规 grep
一起使用会失败:
echo -h | grep -- -?
echo $? # 1
我假设扩展 grep 将 ?
视为特殊字符,那么?
最佳答案
在正则表达式中,?
表示前面字符的零个或一个副本,在本例中为 -
。所以 -?
表示 -
的零个或一个匹配项。 -
的零个匹配项匹配空字符串,因此这个正则表达式将匹配所有内容。您需要对 ?
进行转义,以便按字面解释,而不是正则表达式元字符。
egrep -q -- '-\?|-h|--help'
关于linux - Bash:为什么对这个字符串进行 egrepping 会成功?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36192675/