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)
它们不是正则表达式; 它们是文件名扩展模式,也称为"globs".
*匹配零个或多个任意字符,并?匹配任何单个字符.
有关更多信息,请访问:http://www.gnu.org/s/bash/manual/bash.html#Pattern-Matching
| 归档时间: |
|
| 查看次数: |
4935 次 |
| 最近记录: |