86

运营商=~叫什么?它仅用于比较右侧和左侧吗?

为什么运行测试时需要双方括号?

IE。[[ $phrase =~ $keyword ]]

谢谢

4

3 回答 3

92
  1. 运营商=~叫什么?

    我不确定它有名字。bash 文档只是将其称为=~运算符。

  2. 它仅用于比较右侧和左侧吗?

    右侧被认为是扩展的正则表达式。如果左侧匹配,则运算符返回01否则返回。

  3. 为什么运行测试时需要双方括号?

    因为=~[[ expression ]]复合命令的运算符。

于 2013-10-18T04:24:35.563 回答
42

=~运算符是正则表达式匹配运算符。这个运算符的灵感来自 Perl 使用相同的运算符进行正则表达式匹配。

[[ ]]bash 特殊处理;考虑一个增强版本的[ ]构造:

  • [ ]实际上是一个shell内置命令,它实际上可以作为一个外部命令来实现。看看你的/usr/bin,那里很可能有一个名为“[”的程序!严格来说,[ ]不是 bash 语法的一部分。

  • [[ ]]是一个 shell 关键字,这意味着它是 shell 语法的一部分。在这个结构中,一些保留字符改变了含义。例如,( )像其他编程语言一样表示括号(不启动子shell来执行括号内的内容)。另一个例子是<and>表示小于和大于,而不是 shell 重定向。这允许逻辑表达式更“自然”的外观,但对于新手 bash 程序员来说可能会感到困惑。

威拉万

于 2016-10-07T18:28:52.457 回答
0

=~运算符是模式匹配运算符。它在原始 Bourne shell 中不存在,whentest或 internal[ ]用于条件句。

let命令或在[[ ]]内部具有比 更多的功能test,包括模式匹配功能。这就是为什么在使用时必须使用[[ ]],而不是。[ ]=~

于 2021-07-24T21:23:49.110 回答