使用括号将表达式分组以防万一

问题描述

我想在foreach ($data["{$section['id']}"] as $value) { if (!empty($value)) { code...... } } 中用()将表达式分组,就像这样:

case

这并没有取得任何成功。我也尝试过:

case a in '*(a|b)*') printf '%s\n' 'something something';; esac *(a|b)* 我都没有成功。

解决方法

这将是特定于Bash的:

您需要启用b = np.array([1,1]) B = np.tile(b,(A.shape[0],1)) array([[1,1],[1,1]]) A + B 并使用此特定语法

extglob

请参见#!/usr/bin/env bash shopt -s extglob case "$1" in *@(a|b)*) printf '%s\n' 'something something';; esac

如果使用内置的shopt启用了 man bash shell选项,则会识别出几个扩展的模式匹配运算符。在以下描述中,模式列表是由extglob分隔的一个或多个模式的列表。可以使用以下一个或多个子图案来形成复合图案:

  • |
    匹配零个或一次出现的给定模式
  • ?(pattern-list)
    匹配零个或多个给定模式的出现
  • *(pattern-list)
    匹配给定模式的一个或多个出现
  • +(pattern-list)
    匹配给定的模式之一
  • @(pattern-list)
    匹配除给定模式之一以外的任何内容

或者,您可以让!(pattern-list)在下一个模式的命令组中继续执行,方法是在命令组末尾使用特殊的case标记。

这是 NOT POSIX ,但由 ;& bash {{1} } 仍然:

ksh

现在,正如that other guy在评论中指出的那样。

POSIX方式

zsh
,

您可以转换为基本模式匹配,如下所示:

case 'a' in
*a*|*b*) printf '%s\n' 'something something';;
esac