使用参数调用时,getopts不起作用

时间:2018-03-13 17:37:48

标签: bash getopts

这是我第一次尝试使用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号。到目前为止,它只是给了我一个空白的声明。

1 个答案:

答案 0 :(得分:1)

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