我在GNU bash上,版本 2.05 b.0(1)-release(2002)。我想确定$1
的值是否是/path/*.log
中/etc/logrotate.conf
个/path/actual.log
规则之一的路径。它不是我的盒子所以我无法升级它。
编辑:我的真实目标是logrotate -d /etc/logrotate.conf
回答它是否已经由logrotate管理,或者是否所有当前规则都错过了它。我想知道我的脚本应该只运行/path/actual.log
并查看输出中是否#
。这似乎更简单,涵盖了所有情况,而不是其他方法。
但我仍然想知道如何在Bash 2.0中进行字符串匹配...
$1
的行)$1
左侧的同一行上可以有一条或多条路径
/my/path/*.log
是/other/path*.log /yet/another.log /my/path/*.log {
并且有问题的行是。{li>
{
registration ID
结尾,甚至更多的空格我有一些似乎在Bash 4中有效但在Bash 2.05中没有的东西。我在哪里可以阅读Bash 2.0支持的内容?如何在Bash 2.0中检查匹配?
答案 0 :(得分:2)
您可以找到简洁的bash
更改日志here。
你会看到=~
,正则表达式匹配运算符,直到3.0版才会被引入。
因此,您最好的选择是使用实用程序为您执行正则表达式匹配; e.g:
if grep -Eq '<your-extended-regex>' <<<"$1"; then ...
grep -Eq '<your-extended-regex>' <<<"$1"
:
[[ $1 =~ <your-extended-regex> ]]
类似其退出代码表示$1
的字面值是否与扩展正则表达式<your-extended-regex>
<匹配/强>
grep -E
可能会支持略有不同的正则表达方言。grep
解决方案无法返回捕获组;相比之下,Bash 3.0+通过特殊的数组变量${BASH_REMATCH[@]}
提供整体匹配和捕获组。