灰脚本 - 检测变量是否等于“?”

时间:2013-01-23 14:12:10

标签: string shell switch-statement ash

我正在写一个Ash脚本并尝试检测输入变量是否等于“?”或不。我发现最好使用case来做这件事,但我无法让这个工作。我的代码是:

case $@ in
*?*) usage
    operationSucceeded
    exit;;
  *) echo "Unknown argument: $@"
    usage
    operationFailed
    exit $E_OPTERROR;;   # DEFAULT\
esac

第一个选项总是被触发,而我希望它只在?是变量时触发,而另一个选项用于其他所有选项。

1 个答案:

答案 0 :(得分:2)

更改为

 case $@ in
     *[\?]* ) usage 
    .....
  easc

你可能不需要'\',但它不会受到伤害。

在更一般的意义上,[ABC]被称为字符类,并且将匹配[ ]中列出的任何单个字符。所以在*[\?]*中,我们说的是“任意数量的字符(包括零字符),然后是Char类[\?](在这种情况下,只有'?'字符),后跟零或更多字符“。

IHTH