【问题标题】:Succinctly split BASH command string into arguments and flags简洁地将 BASH 命令字符串拆分为参数和标志
【发布时间】:2021-01-21 11:37:04
【问题描述】:

我的 BASH 命令字符串 ($@) 如下所示:cmd -arg1 foo bar --flag1 --flag2

标志在 args 之后,并且我在 args 中没有任何尴尬的陷阱(我正在构建一个内部工具供我自己使用)。

如何将-arg1 foo -arg2 bar 提取到$args 和--flag1 --flag2 到$flags?

【问题讨论】:

    标签: bash command-line-arguments flags


    【解决方案1】:

    以下工作,虽然我怀疑它不是最佳的:

    
    > 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 中进行字符串操作?
    Ref: https://mywiki.wooledge.org/BashFAQ/035 -- 如何轻松处理脚本中的命令行选项和参数?

    【讨论】:

    • 看起来您将参数列表视为单个以空格分隔的字符串,而不是一系列单独的参数(例如,作为数组)。如果任何参数包含空格和/或文件名通配符,这将导致麻烦。此外,在 常规参数之前有标志更正常。
    • 这不起作用,除非您 100% 确定您将始终以相同的确切格式提供选项和标志,例如,建议的代码(显然)不适用于 @987654324 @;也许是一个荒谬的例子,但不知道你必须实际处理的可能组合......
    猜你喜欢
    • 2011-04-24
    • 2015-12-17
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 2023-02-24
    相关资源
    最近更新 更多