我正在写一个Ash脚本并尝试检测输入变量是否等于“?”或不。我发现最好使用case
来做这件事,但我无法让这个工作。我的代码是:
case $@ in
*?*) usage
operationSucceeded
exit;;
*) echo "Unknown argument: $@"
usage
operationFailed
exit $E_OPTERROR;; # DEFAULT\
esac
第一个选项总是被触发,而我希望它只在?
是变量时触发,而另一个选项用于其他所有选项。
答案 0 :(得分:2)
更改为
case $@ in
*[\?]* ) usage
.....
easc
你可能不需要'\',但它不会受到伤害。
在更一般的意义上,[ABC]
被称为字符类,并且将匹配[ ]
中列出的任何单个字符。所以在*[\?]*
中,我们说的是“任意数量的字符(包括零字符),然后是Char类[\?]
(在这种情况下,只有'?'字符),后跟零或更多字符“。
IHTH