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