bash getopts 函数是否对命令行选项具有破坏性?

use*_*925 4 bash shell

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

我有一组选项,根据特定选项的值,这些选项意味着不同的事情。由于我不能保证 getopts 会首先评估该特定选项,所以我想运行 getopts 一次,仅使用该特定选项,然后使用其他选项再次运行它。

and*_*otn 5

是的,之后只需重置 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
Run Code Online (Sandbox Code Playgroud)

  • 可悲的是,这主要表明 `set -- ...` 是破坏性的。为了表明 getopts 是非破坏性的,您将在第二次使用时再次查找选项 1(并省略第二个 `set --` 语句)。或者,您可以在每次循环后回显 "$@"。 (2认同)