0

我正在编写一个 Ash 脚本并尝试检测输入变量是否等于“?” 或不。我发现最好使用它case来执行此操作,但我无法使其正常工作。我的代码是:

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

第一个选项总是被触发,而我希望它仅在?变量时触发,而其他选项则为其他选项。

4

1 回答 1

2

改成

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

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

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

IHTH

于 2013-01-23T15:03:19.437 回答