【发布时间】:2018-08-22 01:59:54
【问题描述】:
这是我第一次尝试使用 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 号。到目前为止,虽然它只是给了我一个空白的声明。
【问题讨论】:
-
无法复制,为我输出 100。你确定你正在运行正确的脚本吗?
myScript.sh要求脚本是可执行的并且在您的PATH中的目录中,并且出于安全原因,当前工作目录通常不在PATH中。 -
啊,我明白了。我认为我的问题还在于我正在执行 source myScript.sh -s 100。当我只输入 myScript.sh -s 100 时,它就可以工作了。我不知道为什么当我输入“source”时会出现问题
-
啊,我敢打赌它第一次是你在shell中使用
source myScript.sh -s 100的时候,不是吗?计数器getopts用于知道下一个参数不会在连续源之间重置,因此getopts根本看不到任何要解析的参数。在再次使用source之前显式设置OPTIND=1应该会给您预期的行为。