我正在使用一个shell脚本,其中包含以下两个选项:
OPT1=false
OPT2=false
while getopts "Alfqru:p:x:s:a:b:c:t:z:" opt; do
case $opt in
A) OPT1=true
;;
a) OPT2=true
;;
esac
done
现在,当我使用-a或-A运行此脚本时,OPT1设置为true,OPT2设置为false。当我扭转这两种情况时,情况正好相反。我想要的是-A使OPT1成为真,而-a使OPT2为真。那么如何让这些选项区分大小写呢?
答案 0 :(得分:4)
在你的getopts
命令中,你在小a
之后放了一个冒号,这意味着它需要一个参数。我不知道你是不是意外地说了这个。
在这种情况下,除非您为此输入参数,否则getopts将不接受a
参数。即
./example -a
导致错误./example: option requires an argument -- a
&安培;
./example -a some_value
运行良好
这是设计 optstring 时发生的情况。
请注意以下脚本中的上述事实,我将其命名为示例:
#!/bin/bash
OPT1=false
OPT2=false
while getopts :Alfqru:p:x:s:a:b:c:t:z: opt
do
case $opt in
A) OPT1="true";;
a) OPT2="true";;
esac
done
echo "OPT1 : " $OPT1
echo "OPT2 : " $OPT2
(请注意,我已在getopts :
前加OPTSTRING
来抑制错误)
给了我:
$ ./example -Aa
OPT1 : true
OPT2 : false
这里第二个参数a应该有一个参数,但我们还没有输入,所以getopts不接受它,所以你的OPT2是假的。
$ ./example -aA
OPT1 : false
OPT2 : true
此处只有一个参数,因为a
后面的 A 将被视为a
的参数。 A ,参数将存储在$OPTARG
$ ./example -a -A
OPT1 : false
OPT2 : true
此处也只有一个参数,因为a
后面的 -A 将被视为a
的参数。 -A ,参数将存储在$OPTARG
$ ./example -a somevalue -A
OPT1 : true
OPT2 : true
这是预期的行为。
$ ./example -Aa somevalue
OPT1 : true
OPT2 : true
这也是预期的行为。
如果您偶然发现:
,可以考虑在a
之后取消$ ./example -Aa
OPT1 : true
OPT2 : true
。然后你会得到:
$ ./example -aA
OPT1 : true
OPT2 : true
&安培;
NumberAnimation on contentY {
id: yAnimation
to: 0
duration: 200
}
onMovementEnded: {
var index = Math.round(contentY / (itemHeight))
yAnimation.to = index * itemHeight
yAnimation.start()
}