【问题标题】:is bash getopts function destructive to the command-line options?bash getopts 函数对命令行选项有破坏性吗?
【发布时间】:2010-09-13 18:36:50
【问题描述】:

你可以在同一个脚本中使用两次 bash“getopts”函数吗?

我有一组选项,它们的含义取决于特定选项的值。由于我不能保证 getopts 会首先评估该特定选项,因此我想只使用该特定选项运行一次 getopts,然后使用其他选项再次运行它。

【问题讨论】:

    标签: bash shell


    【解决方案1】:

    是的,之后只需重置 OPTIND。

    #!/bin/bash
    
    set -- -1
    while getopts 1 opt; do
        case "${opt}" in
            1) echo "Worked!";;
            *) exit 1;
        esac
    done
    
    OPTIND=1
    set -- -2
    while getopts 2 opt; do
        case "${opt}" in
            2) echo "Worked!";;
            *) exit 1;
        esac
    done
    

    【讨论】:

    • 遗憾的是,这主要表明set -- ... 具有破坏性。为了表明 getopts 是非破坏性的,您将在第二次使用时再次查找选项 1(并省略第二条 set -- 语句)。或者,您可以在每个循环之后回显“$@”。
    【解决方案2】:

    getopts 不会修改原始参数,这与较旧的 getopt 独立可执行文件不同。您可以反复使用 bash 内置的 getopts,而无需修改原始输入。

    有关更多信息,请参阅 bash 手册页。

    HTH。

    干杯,

    罗伯

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-15
      • 2012-07-02
      • 2015-07-16
      • 2010-09-28
      相关资源
      最近更新 更多