使用参数调用时,getopts无法正常工作[重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

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

bash getopts
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.