测试字符串是否为“*”

时间:2013-08-04 08:26:30

标签: string bash variables if-statement

出于某种原因,我无法获得if语句来测试字符串是否真的等于星号。我已经尝试了我能想到的每一个组合,我不想搞乱文件通配。请帮忙。

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

*更新*

这两项建议都有效。问题显然不是*比较,而是if语句的其他部分。这应该比较$VAR是否在0到20之间或是通配符。

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

IF语句的另一部分,如果显然是最后的比较。

*更新*

再次测试它并检查我的语法。如果$VAR介于0到20之间,则效果很好(true),当$VAR超过20时,它也有效(报告为false),但是只要我尝试将$VAR设置为* if语句怪异并弹出:

line 340: [: *: integer expression expected

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

使用bash double brackets的另一个版本:

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

双括号可让您使用&&||。此外,bash不对[[的参数执行分词或全局扩展,因此$VAR不需要引用,(不需要转义。

如果您需要(某些)可移植性,

[[也适用于zsh和ksh。