简洁地将 BASH 命令字符串拆分为参数和标志

Succinctly split BASH command string into arguments and flags

我的 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 
cmd

> echo 
-arg1

> echo 
foo

> echo 
bar

参考:https://mywiki.wooledge.org/BashFAQ/100 -- 我如何在 bash 中进行字符串操作?
Ref: https://mywiki.wooledge.org/BashFAQ/035 -- 如何轻松处理脚本中的命令行选项和参数?