if[ "$x"="*.c" ]
then
echo $x
else
echo "not .c"
我想检查输入参数是否以" .c"("*.c")结束。
张贴代码中的条件始终为真,因为您在[ ... ]
内部具有的"$x"="*.c"
被外壳解释为单个非空字符串值,而非空字符串值是 truthy 在bash中。
但是为什么那是"单个非空字符串值"?=
符号呢?
要被视为[ ... ]
内置的条件操作员,您必须在=
符号周围放置空间。否则,壳不会将其识别为操作员。
也就是说,这样写(还修复了其他语法错误):
if [ "$x" = "*.c" ]; then echo "$x"; else echo "not .c"; fi
这将使条件并非总是如此,但仍然不会做您想要的。要检查变量是否以.c结束,您需要使用[[ ... ]]
内置来不同:
if [[ "$x" == *.c ]]; then echo "$x"; else echo "not .c"; fi