linux - 我在 bash 中的 case 命令中遇到模式匹配问题
问题描述
我通常在 [[ 命令中使用模式匹配,但我想在 case 命令中使用它。
#!/bin/bash
bash -version|head -1
# Test 1:
[[ apple79 == apple@(14|38|79|11) ]] && echo ok 1
# Test2:
case apple79 in apple@(14|38|79|11)) echo ok 2;; *) ;; esac
test.sh
当我在终端使用命令运行上述内容时,.
一切正常。
. test.sh
GNU bash, version 4.4.20(1)-release (x86_64-pc-linux-gnu)
ok 1
ok 2
但是当我尝试这样运行它时:
./t.sh
GNU bash, version 4.4.20(1)-release (x86_64-pc-linux-gnu)
ok 1
./t.sh: line 6: syntax error near unexpected token `('
./t.sh: line 6: ` case apple79 in apple@(14|38|79|11)) echo ok 2;; *) ;; esac'
我收到了 case 命令的错误消息。我看过一些 bash 模式匹配文档,例如: https ://www.linuxjournal.com/content/pattern-matching-bash 但我对这个问题一无所知。
解决方案
该extglob
选项在内部隐式启用[[ ... ]]
以进行模式匹配,但您需要显式启用它才能将其与case
语句一起使用。
#!/bin/bash
shopt -s extglob
[[ apple79 == apple@(14|38|79|11) ]] && echo ok 1
case apple79 in apple@(14|38|79|11)) echo ok 2;; *) ;; esac
推荐阅读
- f# - 包含选项的 F# 数据类型
- ffmpeg - 使用 cvlc、openRTSP 或 ffmpeg 从 Hikvision 将 RTSP 保存到 .mp4 时出错
- python-3.x - 具有multiIndex的数据帧元组索引并减去索引的第三个元素
- java - 检查该值是否为空并将其分配为 0
- asp.net-core - 直接实例化 ModelExpression
- php - Codeigniter 在托管程序中发送电子邮件不工作 SMTP
- php - 如何配置 Nginx 执行 PHP
- scala - 将带有标题的空 DF 写入 csv
- python - 如何通过 Python 连接到 Azure SQL Server
- fluentd - 流利的本地时间适用于标准输出,但不适用于弹性搜索