我试图用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
答案 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