你能在Bash脚本案例陈述中使用正则表达式"xyz*)"

Ash*_*eri 3 bash case-statement

我正在挖掘mysql_safe(试图添加一些选项),我遇到了这种用于从Launch Agent分配变量的bash脚本技术:com.mysql.mysqld.plist(我在mac上).

现在mysqld_safe不知道它是由LaunchCtl调用的,所以我假设任何选项都是由LaunchCtl转换成命令行参数,但我发现这个sytnax入侵了.谁知道这是如何工作的?

我理解Bash中Case/Switch的基础知识:

case "$myval" in
  switch1) do something;;
  switch2) do something;;
        *) do whatever fallthrough logic;;
esac      
Run Code Online (Sandbox Code Playgroud)

默认情况下通过使用*在下面的脚本块中,arg值是:" - baseased ="或"--datadir ="或"--pid-file ="等等但是什么与*in那里?
这是Switch语句中的正则表达式吗? 有一个后卫?

for arg do
  # the parameter after "=", or the whole $arg if no match
  val=`echo "$arg" | sed -e 's;^--[^=]*=;;'`
  # what's before "=", or the whole $arg if no match
  optname=`echo "$arg" | sed -e 's/^\(--[^=]*\)=.*$/\1/'`
  # replace "_" by "-" ; mysqld_safe must accept "_" like mysqld does.
  optname_subst=`echo "$optname" | sed 's/_/-/g'`
  arg=`echo $arg | sed "s/^$optname/$optname_subst/"`
  arg=`echo $arg | sed "s/^$optname/$optname_subst/"`
  case "$arg" in
    # these get passed explicitly to mysqld
    --basedir=*) MY_BASEDIR_VERSION="$val" ;;
    --datadir=*) DATADIR="$val" ;;
    --pid-file=*) pid_file="$val" ;;
    --plugin-dir=*) PLUGIN_DIR="$val" ;;
    --user=*) user="$val"; SET_USER=1 ;;
    ...
    ...
    *)
      if test -n "$pick_args"
      then
        append_arg_to_args "$arg"
      fi
      ;;
  esac
Run Code Online (Sandbox Code Playgroud)

Kei*_*son 5

它们不是正则表达式; 它们是文件名扩展模式,也称为"globs".

*匹配零个或多个任意字符,并?匹配任何单个字符.

有关更多信息,请访问:http://www.gnu.org/s/bash/manual/bash.html#Pattern-Matching