如何使GETOPTS选项字符串选项区分大小写?

时间:2015-11-27 16:05:25

标签: bash shell

我正在使用一个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为真。那么如何让这些选项区分大小写呢?

1 个答案:

答案 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()
}