使用参数调用时 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
这是我第一次尝试使用 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