运营商=~
叫什么?它仅用于比较右侧和左侧吗?
为什么运行测试时需要双方括号?
IE。[[ $phrase =~ $keyword ]]
谢谢
运营商
=~
叫什么?
我不确定它有名字。bash 文档只是将其称为=~
运算符。
它仅用于比较右侧和左侧吗?
右侧被认为是扩展的正则表达式。如果左侧匹配,则运算符返回0
,1
否则返回。
为什么运行测试时需要双方括号?
因为=~
是[[ expression ]]
复合命令的运算符。
该=~
运算符是正则表达式匹配运算符。这个运算符的灵感来自 Perl 使用相同的运算符进行正则表达式匹配。
被[[ ]]
bash 特殊处理;考虑一个增强版本的[ ]
构造:
[ ]
实际上是一个shell内置命令,它实际上可以作为一个外部命令来实现。看看你的/usr/bin,那里很可能有一个名为“[”的程序!严格来说,[ ]
不是 bash 语法的一部分。
[[ ]]
是一个 shell 关键字,这意味着它是 shell 语法的一部分。在这个结构中,一些保留字符改变了含义。例如,( )
像其他编程语言一样表示括号(不启动子shell来执行括号内的内容)。另一个例子是<
and>
表示小于和大于,而不是 shell 重定向。这允许逻辑表达式更“自然”的外观,但对于新手 bash 程序员来说可能会感到困惑。
威拉万
该=~
运算符是模式匹配运算符。它在原始 Bourne shell 中不存在,whentest
或 internal[ ]
用于条件句。
该let
命令或在[[ ]]
内部具有比 更多的功能test
,包括模式匹配功能。这就是为什么在使用时必须使用[[ ]]
,而不是。[ ]
=~