问题描述
我的 BASH 命令字符串 ($@
) 如下所示:cmd -arg1 foo bar --flag1 --flag2
标志在 args 之后,我在 args 中没有任何尴尬的问题(我正在构建一个供我自己使用的内部工具)。
如何将 -arg1 foo -arg2 bar
提取到 $args
并将 --flag1 --flag2
提取到 $flags
?
解决方法
以下有效,尽管我怀疑它不是最佳的:
> echo $x
cmd -arg1 foo bar --flag1 --flag2
> flags="--${x#*--}"
> echo $flags
--flag1 --flag2
> before_flags=${x%%"$flags"}
> echo $before_flags
cmd -arg1 foo bar
> set $before_flags
> echo $1
cmd
> echo $2
-arg1
> echo $3
foo
> echo $4
bar
Ref: https://mywiki.wooledge.org/BashFAQ/100 -- 如何在 bash 中进行字符串操作?
参考:https://mywiki.wooledge.org/BashFAQ/035 -- 如何轻松处理脚本中的命令行选项和参数?