用case语句表达正则表达式

时间:2013-05-07 11:17:17

标签: regex linux case sh

我试图用sh脚本中的case语句和正则表达式检查我的变量值,如下面的代码:

#!/bin/sh

test="test.1.testing"

case $test in
test.[5-9]+.testing) echo "value type 1";;
test.[1-4]+.testing) echo "value type 2";;
esac

此脚本不起作用,有sh脚本(not bash)的任何解决方案

我将符号"+"更改为"*"并且脚本成功运行,但我需要使用"+"进行测试(发生一次或多次)

#!/bin/sh

test="test.1.testing"

case $test in
test.[5-9]*.testing) echo "value type 1";;
test.[1-4]*.testing) echo "value type 2";;
esac

1 个答案:

答案 0 :(得分:1)

case中的模式匹配是根据路径名扩展执行的。特殊符号为*?[…]

符号+被视为简单字符,而不是[]的量词。

*也是如此;这里它不是[]的正则表达量词,而是一个单独的模式符号。在您的情况下,它匹配零个字符,这导致模式匹配成功。您可以通过从*移除case来检查此问题。

因此,您应该使用以下代码:

#!/bin/sh

test="test.1.testing"

case $test in
    test.[5-9].testing) echo "value type 1";;
    test.[1-4].testing) echo "value type 2";;
esac