重点关注这个qazxsw poi中提到的qazxsw poi语法:
@()
这种语法来自哪里?为什么在这种情况下使用它?和有什么区别:
要么
[[ $OSTYPE == *@(darwin|freebsd|solaris|cygwin|openbsd)* ]]
这似乎都是等价的。
是否使用此语法代替[[ $OSTYPE =~ (darwin|freebsd|solaris|cygwin|openbsd) ]]
运算符以便使用正则表达式实现更好的可移植性?
谢谢你的澄清
这使用了[[ $OSTYPE == *(darwin|freebsd|solaris|cygwin|openbsd) ]]
的Pattern Matching部分中解释的规则:
=~
这使用正则表达式来执行匹配:
man bash
这些是非常不同的机制,具有不同的性能影响。值[[ $OSTYPE == *@(darwin|freebsd|solaris|cygwin|openbsd)* ]]
,[[ $OSTYPE =~ (darwin|freebsd|solaris|cygwin|openbsd) ]]
,......中没有模式,这些是简单的文字字符串。 darwin
语法非常适合这种更简单的匹配逻辑,因此使用正则表达式似乎有点过分。
在这个例子中,两种写作风格都给出了相同的行为,只是它们通过不同的机制执行匹配。如果不是像freebsd
,@(...)
这样的文字字符串列表......你有更复杂的正则表达式模式,那么第一种写作风格就不是一种选择,你需要使用具有完全正则表达能力的第二种版本。
是否使用此语法代替
darwin
运算符以便使用正则表达式实现更好的可移植性?
使用它是因为它足够好用于此目的,不需要正则表达式。
在freebsd
中搜索=~
选项:
如果使用
extglob
内置启用了man bash
shell选项,则会识别多个扩展模式匹配运算符。在以下描述中,模式列表是由extglob
分隔的一个或多个模式的列表。可以使用以下子模式中的一个或多个来形成复合图案:shopt