Bash正则表达式=〜运算符

use*_*946 47 unix bash shell

操作员=~叫什么?它只用于比较左侧的右侧吗?

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

即. [[ $phrase =~ $keyword ]]

谢谢

Car*_*rum 46

  1. 操作员=~叫什么?

    我不确定它有名字.在bash的文件只是调用它的=~操作.

  2. 它只用于比较左侧的右侧吗?

    右侧被视为扩展正则表达式.如果左侧匹配,则操作员返回0,1否则.

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

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

  • 如果左侧匹配,则运算符返回0或1,如你所说,但它也设置了`BASH_REMATCH`数组,值得一提.另外,`[[`不是命令 - 它是一个关键字. (6认同)
  • `[[`是一个引入复合命令`[[...]]`的shell关键字,就像`if`是一个引入`if..then..fi`复合命令的shell关键字一样. (6认同)
  • bash 很奇怪。`type [[` 表示 `[[` 是一个 shell 关键字,但手册页确实至少一次将 `[[` 作为 *条件命令* 引用。嗯。 (2认同)

Wir*_*nto 17

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

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

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

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

Wirawan


Ant*_*dge 7

=~运算符是模式匹配运算符。test当或 在内部[ ]用于条件语句时,它在原始 Bourne shell 中不存在。

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