-1

我尝试在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)解决任何问题

我更改了符号"+""*"脚本成功运行,但我需要测试"+"(出现 1 次或多次)

#!/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
4

1 回答 1

2

case根据Pathname Expansion执行模式匹配。特殊符号为*, ?,[…]

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

对于*;也是如此。这里它不是一个正则表达式量词,[]而是一个单独的模式符号。在您的情况下,它匹配零个字符,从而导致成功的模式匹配。您可以通过*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
于 2013-05-07T11:31:30.137 回答