2008-09-28 134 views
3

你可以在同一个脚本中使用两次bash“getopts”函数吗?是bash getopts函数对命令行选项的破坏吗?

我有一套选项,这将意味着不同的事情取决于具体的选项的价值。由于我不能保证getopts会首先评估特定的选项,所以我想运行getopts一次,只使用该特定选项,然后使用其他选项第二次运行它。

回答

4

是的,之后重置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 
+1

可悲的是,这表明主要是`设定 - ...`是破坏性的。为了证明getopts是非破坏性的,你可以再次使用第1个选项(并省略第二个`set --`语句)。或者,每次循环后都会回显“$ @”。 – 2008-09-28 06:51:28

0

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

查看bash手册页获取更多信息。

HTH。

欢呼声,

罗布