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

问题描述

我的 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 -- 如何轻松处理脚本中的命令行选项和参数?