如何将第一个参数与 getopts 的第一个参数分开?
#!/bin/bash
priority=false
it=0
dir=/
while getopts "p:i" option
do
case $option in
i) it=$OPTARG;;
p) priority=true;;
esac
done
if [[ ${@:$OPTIND} != "" ]]
then
dir=${@:$OPTIND}
fi
echo $priority $it $dir
如果我执行它,我会得到 $dir
的 2 testDir
和 $it
的 0
,而不仅仅是 testDir
代表 $dir
,2
代表 $it
。我怎样才能得到预期的行为?
./test.sh -pi 2 testDir
true 0 2 testDir
#!/bin/bash
priority=false
it=0
dir=/
while getopts "p:i" option
do
case $option in
i) it=$OPTARG;;
p) priority=true;;
esac
done
if [[ ${@:$OPTIND} != "" ]]
then
dir=${@:$OPTIND}
fi
echo $priority $it $dir
If I execute it I get 2 testDir
for $dir
and 0
for $it
, instead of just testDir
for $dir
and 2
for $it
. How can I get the expected behavior?
./test.sh -pi 2 testDir
true 0 2 testDir
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我会这样写:
I would write this:
您似乎将
getopts
的 optstring 参数弄错了。您有p:i
,而您想要的是pi:
,以便 -i 开关接受参数。You seem to have the optstring parameter to
getopts
wrong. You havep:i
, while what you want ispi:
, so that the -i switch takes the argument.