为什么如果陈述总是如此?

时间:2017-12-05 16:44:50

标签: linux syntax

if[ "$x"="*.c" ]
then
    echo $x
else
    echo "not .c"

我想检查输入参数是否以" .c"结尾? (" * C&#34)。

1 个答案:

答案 0 :(得分:0)

发布代码中的条件总是如此, 因为"$x"="*.c"中的[ ... ]被shell解释为单个非空字符串值,非空字符串值 truthy 在Bash。

但为什么这是一个"单个非空字符串值"?那么=标志呢?

要被视为[ ... ]内置函数的条件运算符,您必须在=符号周围添加空格。否则,shell不会将其识别为运营商。

也就是说,这样写(修复其他语法错误):

if [ "$x" = "*.c" ]; then echo "$x"; else echo "not .c"; fi

这将使条件不总是正确的,但它仍然不会做你想要的。要检查变量是否以.c结尾,您需要使用[[ ... ]]内置函数以不同的方式编写它:

if [[ "$x" == *.c ]]; then echo "$x"; else echo "not .c"; fi