Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 在大小写中使用括号将表达式分组_Bash_Shell_Switch Statement_Case_Glob - Fatal编程技术网

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]*
。另一个人,非常感谢!这解决了我的问题。戈登·戴维森,谢谢,但这些是字符串的占位符。