![如何在 bash case 语句中的字符串模式(空格分隔的单词)中使用“joker”或通配符?](https://linux22.com/image/130691/%E5%A6%82%E4%BD%95%E5%9C%A8%20bash%20case%20%E8%AF%AD%E5%8F%A5%E4%B8%AD%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2%E6%A8%A1%E5%BC%8F%EF%BC%88%E7%A9%BA%E6%A0%BC%E5%88%86%E9%9A%94%E7%9A%84%E5%8D%95%E8%AF%8D%EF%BC%89%E4%B8%AD%E4%BD%BF%E7%94%A8%E2%80%9Cjoker%E2%80%9D%E6%88%96%E9%80%9A%E9%85%8D%E7%AC%A6%EF%BC%9F.png)
如何将 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
;;