使用参数调用时 getopts 不工作

getopts not working when called with an argument

这是我第一次尝试使用 getopts,到目前为止它对我没有用。我脚本中的代码是:

while getopts "s:" opt; do
 case $opt in
    s) subj=$OPTARG;;
    \?) echo "Incorrect usage";;
 esac
done

echo ""
echo $subj

当我尝试运行这样的脚本时:

myScript.sh -s 100

我希望它回应我指定的主题 ID 号。到目前为止,虽然它只是给了我一个空白的陈述。

getopts 使用 OPTIND 的当前值来知道接下来要查看哪个参数。但是,如果您使用 source 到 运行 您的脚本,则 OPTIND 永远不会在调用之间重置。您可能在第一个 运行 之后添加了 subj,因此它的值在您第一次获取脚本时并未设置。明确设置 OPTIND=1 会修复它。

$ source myScript.sh -s 100

100
$ unset subj; source myScript.sh -s 100


$ OPTIND=1
$ source myScript.sh -s 100

100