【发布时间】:2010-09-13 18:36:50
【问题描述】:
你可以在同一个脚本中使用两次 bash“getopts”函数吗?
我有一组选项,它们的含义取决于特定选项的值。由于我不能保证 getopts 会首先评估该特定选项,因此我想只使用该特定选项运行一次 getopts,然后使用其他选项再次运行它。
【问题讨论】:
你可以在同一个脚本中使用两次 bash“getopts”函数吗?
我有一组选项,它们的含义取决于特定选项的值。由于我不能保证 getopts 会首先评估该特定选项,因此我想只使用该特定选项运行一次 getopts,然后使用其他选项再次运行它。
【问题讨论】:
是的,之后只需重置 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 -- 语句)。或者,您可以在每个循环之后回显“$@”。
getopts 不会修改原始参数,这与较旧的 getopt 独立可执行文件不同。您可以反复使用 bash 内置的 getopts,而无需修改原始输入。
有关更多信息,请参阅 bash 手册页。
HTH。
干杯,
罗伯
【讨论】: