getopts无法识别问号

时间:2013-06-12 14:06:17

标签: bash shell parsing getopts

我目前正在解析脚本中的选项:

while getopts ":ia" OptionArgument; do
case $OptionArgument in
    i ) echo "bli";;
    a ) echo "bla";;
    * ) echo "flag not known";;
    ? ) echo "unknown parameter";;
esac
done

每个解析选项和标志都有效 - 除了这一个:? )。因此,如果我用./MyScript hjrfgdskjgh之类的方法调用我的脚本,它会正确地传递循环 - 尽管它应该在? )的最后一行中捕获。
我还尝试删除":ia"或使用\?. )的引号 - 没有任何作用!我做错了什么?

2 个答案:

答案 0 :(得分:4)

?字符具有特殊含义,请参阅http://tldp.org/LDP/abs/html/special-chars.html#WILDCARDQU您无法使用未转义或未加引号的字符。您必须使用./script.sh -'?'./script.sh -\?

来调用脚本

答案 1 :(得分:0)

*匹配任何内容。把任何东西放在它下面是毫无意义的,只有当*与它不匹配时才会匹配。