2013-08-04 42 views
1

出于某种原因,我无法获得if语句来测试字符串是否字面上等于星号。我已经尝试了所有我能想到的组合,我不想搞乱文件混淆。请帮忙。测试字符串是否为“*”

if [ $VAR = "\*" ]; then 

* UPDATE *

这些建议都工作。这个问题显然不是与*比较,而是与if语句的另一部分。这应该是比较$VAR是否在0到20之间,或者是通配符。

if [ "$VAR" -gt 0 ] && [ "$VAR" -lt 20 ] || [ "$VAR" = "*" ]; then 

IF语句的其他部分,如果显然是去了最后的比较。

* UPDATE *

只要再次测试,并检查了我的语法。当$VAR为0 20之间,它的伟大工程(真),当$VAR超过20它还但是当我尝试设置$VAR到*的if语句怪胎作品(报告错误),并弹出:

line 340: [: *: integer expression expected 

回答

1

另一个版本使用bash的double brackets

if [[ $VAR = "*" || ($VAR -gt 0 && $VAR -lt 20) ]]; then 

双支架可以使你使用&&||。此外,庆典不执行上的参数分词或水珠扩张[[,所以$VAR不需要被引用和(并不需要进行转义。

[[也能在的zsh和ksh,如果你需要大一些的便携性。

+0

完美的解决方案,谢谢! – Atomiklan

1
$ VAR="*" 
$ if [ "$VAR" = "*" ] ; then echo Star ; fi 
Star 

引用变量时,他们可以包含glob模式,空白或其他可解释的序列,你不想解释。如果$VAR为空,这也可以避免语法错误。

关于第二个问题,[ "$VAR" -gt 0 ]没有意义,如果$VAR是什么,但一个数字。所以你必须避免在那种情况下进行评估。简单地交换你的测试 - ||&&是短路(在bash至少,不知道这是POSIX):

if [ "$VAR" = "*" ] || [ "$VAR" -gt 0 -a "$VAR" -lt 20 ] ; then 
+0

不,仍然得到行336::*:整数表达式预期 – Atomiklan

+0

您有两个演示表明这个工程。你确定这是你说的同样的陈述吗?你能准确地发布你现在拥有的东西吗? – Mat

+0

好吧,实际上这个工作。这个问题显然与我的if语句。即我有它比较,如果一个数字是大于0并小于20或等于* – Atomiklan

相关问题