如何在 bash case 语句中的字符串模式(空格分隔的单词)中使用“joker”或通配符?

如何在 bash case 语句中的字符串模式(空格分隔的单词)中使用“joker”或通配符?

如何将 bash 的“case”语句用于“非常具体”的字符串模式(多个单词,包括空格)?

问题是:我从一个非常具体的函数收到一个多字字符串,包括版本号。现在版本号会不时发生变化。我不想在我的 case 语句中添加越来越多的特定字符串模式,而是想使用小丑(或者任何这个词,比如 "Ubuntu 16.04.? LTS" 或 "Ubuntu 16.04.* LTS" 。但是,我还没有找到任何解决方案。

请参阅我到目前为止使用的 shell 脚本:

    .
    .
    .
    case "${OS}" in
    "SUSE Linux Enterprise Server 11 SP4")
        echo "SLES11 detected."
        ;;
    "Ubuntu 16.04.3 LTS" | "Ubuntu 16.04.4 LTS"     )
        echo "UBUNTU16 detected."
        ;;
    "CentOS Linux 7 (Core)")
        echo "CENTOS7 detected."
        ;;
    *)
        echo "Unknown OS detected. Quitting for safety reasons."
        exit -1
        ;;
    .
    .
    .

答案1

您可以在 case 语句中使用模式,但是不能引用它们,因此必须转义空格。

case ${OS} in
"SUSE Linux Enterprise Server 11 SP4")
    echo "SLES11 detected."
    ;;
Ubuntu\ 16.04.[3-4]\ LTS)
    echo "UBUNTU16 detected."
    ;;
"CentOS Linux 7 (Core)")
    echo "CENTOS7 detected."
    ;;
*)
    echo "Unknown OS detected. Quitting for safety reasons."
    exit -1
    ;;

相关内容