Bash 在大小写中使用括号将表达式分组
我想在Bash 在大小写中使用括号将表达式分组,bash,shell,switch-statement,case,glob,Bash,Shell,Switch Statement,Case,Glob,我想在案例中用()对表达式进行分组,如下所示: 中的案例a “*(a | b)*”)printf“%s\n”某物“;; 以撒 但这并没有取得任何成功。我也尝试过: *(a | b)* *”('a | b')”* 所有这些我都没有成功。这将是Bash特有的: 您需要启用extglob,并使用此特定语法 #/usr/bin/env bash shopt-s extglob 案件“$1” *@(a | b)*)printf“%s\n”某物;; 以撒 请参见manbash: 如果使用shopt内置的
案例中用()对表达式进行分组,如下所示:
中的案例a
“*(a | b)*”)printf“%s\n”某物“;;
以撒
但这并没有取得任何成功。我也尝试过:
*(a | b)*
*”('a | b')”*
所有这些我都没有成功。这将是Bash特有的:
您需要启用extglob
,并使用此特定语法
#/usr/bin/env bash
shopt-s extglob
案件“$1”
*@(a | b)*)printf“%s\n”某物;;
以撒
请参见manbash
:
如果使用shopt内置的extglob
shell选项被启用,则会识别多个扩展模式匹配运算符。在以下描述中,模式列表是由
分隔的一个或多个模式的列表。复合图案可以使用以下一个或多个子图案形成:
?(模式列表)
匹配给定模式的零个或一个匹配项
*(模式列表)
匹配给定模式的零次或多次出现
+(模式列表)
匹配给定模式的一个或多个匹配项
@(模式列表)
匹配给定模式之一
!(图案列表)
匹配除一个给定模式之外的任何模式
或者,您可以使用特殊的,让案例
继续执行下一个模式的commands组&代码>命令组末尾的标记
这不是POSIX,而是由bash、ksh或zsh处理的
#/usr/bin/env ksh
案件“$1”
*a*);继续下一个命令组
*b*)printf“%s\n”某物“;;
以撒
现在,正如一篇评论中指出的那样
POSIX方式:
#/副秘书长/垃圾箱/环境卫生
案件“$1”
*a*|*b*)打印文件“%s\n”某物“;;
以撒
您可以转换为基本模式匹配,如下所示:
case 'a' in
*a*|*b*) printf '%s\n' 'something something';;
esac
你是否已经决定标准的*a*.*b*)
不适合你的情况?如果a
和b
实际上是单个字母(不是较长字符串/模式的占位符),你可以使用模式*[ab]*
。另一个人,非常感谢!这解决了我的问题。戈登·戴维森,谢谢,但这些是字符串的占位符。