无法获得bash正则表达式的工作

时间:2013-12-05 11:33:49

标签: regex bash

这是我脚本的一部分:

   if [[ `hostname --fqdn` != '(\S+-laptop)' ]]; then
            echo "Wrong node, run it on server"
            exit 1
    fi

    echo "testing ok"
    exit 0

这是结果:

++ hostname --fqdn
+ [[ mylinux1-laptop != \(\\\S\+\-\l\a\p\t\o\p\) ]]
+ echo 'Wrong node, run it on server'
Wrong node, run it on server
+ exit 1

我在在线工具上测试过并且工作过 - 无法理解为什么不在shell中...

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

正确的BASH正则表达式语法是:

[[ ! "$(hostname --fqdn)" =~ [^[:space:]]+-laptop ]] && echo "Wrong node!" && exit 1
    BAS中的
  • 正则表达式不需要引用它们
  • \S不适用于BASH正则表达式引擎
  • 使用[^[:space:]]匹配除空格
  • 之外的任何内容
  • BASH正则表达式运算符为=~
  • 否定应该在条件的开头

您也可以使用 shell glob 而不是正则表达式:

[[ "$(hostname --fqdn)" != [^\ ]*"-laptop" ]]