1

我试图让这个正则表达式模式在 case 语句中工作以匹配可以传递给脚本的特定类型的 ID。我需要将字母数字字符的确切数量与破折号相匹配,以将此消息 ID 与可能传递给此 bash 脚本的任何其他内容区分开来。

消息 id 格式的示例:c7c3e910-c9d2-71e1-0999-0aec446b0000

#!/bin/bash
until [ -z "$1" ]
 do
    case "$1" in
    "")
        echo "No value passed"
        ;;
    [a-z0-9]\{8\}-[a-z0-9]\{4\}-[a-z0-9]\{4\}-[a-z0-9]\{4\}-[a-z0-9]\{12\})
        echo "Found message ID: $1"
        ;;
    *)
        echo "Server $1"
        ;;
    esac
    shift 
done
4

1 回答 1

4

UUID 由十六进制数字组成。

case 语句接受 glob 样式的模式,而不是正则表达式(方括号中的字符范围是可以的,但花括号中的量词不起作用)。

您可以使用 Bash 正则表达式匹配来测试您的字符串。

pattern='[[:xdigit:]]{8}-[[:xdigit:]]{4}-[[:xdigit:]]{4}-[[:xdigit:]]{4}-[[:xdigit:]]{12}'
if [[ $1 =~ $pattern ]]
then
    echo "found"
fi
于 2012-07-09T15:12:26.793 回答