Unix KSH脚本在case语句中检查字母数字

Unix KSH脚本在case语句中检查字母数字,unix,case,ksh,Unix,Case,Ksh,下面是我试图实现的一个简化模型: #!bin/ksh string=AUS00 case $string in [[:alnum:]] ) echo "alphanumeric" ;; *) echo "nope" ;; esac 我无法验证字母数字代码 限制条件: 验证需要在case语句中进行 不支持alnum函数 只有阳性检查。无法检查是否缺少字母数字 非常感谢该模式将与单个字母数字字符相匹配。您的字符串超过一个字符,因此不匹配 如果要检查字符串是否包含alnum字符,则需要*[[:aln

下面是我试图实现的一个简化模型:

#!bin/ksh
string=AUS00
case $string in
[[:alnum:]] ) echo "alphanumeric" ;;
*) echo "nope" ;;
esac
我无法验证字母数字代码

限制条件:

  • 验证需要在case语句中进行
  • 不支持alnum函数
  • 只有阳性检查。无法检查是否缺少字母数字

  • 非常感谢

    该模式将与单个字母数字字符相匹配。您的字符串超过一个字符,因此不匹配

    如果要检查字符串是否包含alnum字符,则需要
    *[[:alnum:][]*

    如果要检查字符串是否只包含alnum字符,我会翻转检查以查看该字符串是否包含非alnum字符:

    for string in alnumOnly 'not all alnum'; do
        case "$string" in
            *[^[:alnum:]]*) echo "$string -> nope" ;;
            *)              echo "$string -> alphanumeric" ;;
        esac
    done
    

    我意识到ksh(甚至ksh88)实现了bash所描述的“扩展模式”:

    模式列表是分隔的一个或多个模式的列表 用一个|从对方身上。可以形成复合图案 具有以下一项或多项:

    ?(模式列表) 可选地匹配任意一个给定模式

    *(图案列表) 匹配给定对象的零次或多次出现 模式

    +(图案列表) 匹配给定模式的一个或多个实例

    @(图案列表) 完全匹配给定模式中的一个

    !!(图案列表) 匹配除一个给定模式之外的任何模式

    因此,我们可以:

    case "$string" in
        +([[:alnum:]]) ) echo "$string -> alphanumeric" ;;
        *              ) echo "string -> nope" ;;
    esac
    

    也只是想引起你的注意。你的hashbang中漏了一个斜杠:
    #/bin/ksh
    谢谢。你能解释一下翻开支票的理由吗。我尝试了[[:alnum:],它同时传递字母数字和非字母数字字符串。由于
    *
    确实是一个通配符模式,它将匹配任何内容。因此模式
    *[:alnum:][]*
    意味着任何字符都可以出现在字母数字字符之前和/或之后。您的“非字母数字字符串”可能至少包含一个alnum字符。这就是为什么翻转逻辑更容易:如果字符串至少包含一个非alnum字符,则该字符串不能完全是alnum。
    case "$string" in
        +([[:alnum:]]) ) echo "$string -> alphanumeric" ;;
        *              ) echo "string -> nope" ;;
    esac