正则表达式改变在BASH中不匹配

时间:2012-09-08 08:05:57

标签: regex bash if-statement

我一直试图让多个不匹配的改动在BASH中工作。

这是我想要的不匹配。如果有两个参数且一个开关(-a,-b,-c,-d)是第一个参数。

例:
./scriptname-a filename
./scriptname-d filename

我希望这与成功相呼应的是:
./scriptname filename ipaddress。

有效的代码是:

if [[ "$#" = "2" && "$1" =~ ([^-a][^-b][^-c]) ]]
    then
        echo "success"
    else
        echo "fail"
  fi

如果我尝试使用([^-a][^-b][^-c][^-d])扩展更改,它将停止工作。我尝试过多种语法变体,似乎没什么用。我也尝试将它们组合在一起,如:

if [[ "$#" = "2" && "$1" =~ ([^-a][^-b]) && "$1" =~ ([^-c][^-d]) ]]这也失败了。

1 个答案:

答案 0 :(得分:2)

怎么样:

if [[ "$#" = "2" && "$1" =~ -[a-d]$ ]]