【问题标题】:Options not parse as Argument in Unix选项在 Unix 中不解析为参数
【发布时间】:2015-05-08 16:44:55
【问题描述】:

我有一个适用于 $1 $2 $3 等的现有脚本。我想添加一个可选参数而不影响顺序。

我们是否有一些现成的解决方案: 如果找到一个有效的选项(使用 getopts),这个参数索引不应该被认为是参数。

【问题讨论】:

  • 嗯,不太清楚 - 你能提供一个 sn-p 吗?如前所述,您只需检查“$ 4” - 但您总是会在第 4 位使用新参数调用脚本......如果使用 getopts 则可能会有所不同(即新选项上的脚本 'barfs'出现错误。
  • 查看选项数量? if [ $# -lt 4 ]; then ...; elif [ $# -eq 4]; then ...; else ...; fi虽然肯定很脆。
  • 请拒绝投票的原因?

标签: bash command-line-arguments getopt getopts


【解决方案1】:

通常的解决方案是使用getopts对可选标志选项进行扫描处理,然后执行命令:

shift $((OPTIND-1))

getopts 完成时,$OPTIND 将是第一个尚未处理的参数的编号。然后shift 命令删除第一个OPTIND-1 参数,这实际上将未处理的参数重新编号为$1$2、....

【讨论】:

    【解决方案2】:

    使用getopts的典型做法是循环直到看到第一个非选项项:

    while [[ $1 = -* ]]; do
      # handle $1 here
      shift
    done
    
    foo=$1
    bar=$2
    baz=$3
    

    如果您的选项本身带有参数 (--directory /somewhere),那么您只需要 shift 一个额外的实例。

    【讨论】:

    • 很好,但是“自己有更多选择”这句话有点令人困惑;一个选项所接受的不是另一个option,而是一个[option] argument
    猜你喜欢
    • 2010-11-06
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 2016-01-24
    • 2011-09-23
    相关资源
    最近更新 更多