if[ "$x"="*.c" ]
then
echo $x
else
echo "not .c"
我想检查输入参数是否以“.c”(“*.c”)结尾。
最佳答案
发布的代码中的条件始终为真,
因为 [ ... ]
中的 "$x"="*.c"
被 shell 解释为单个非空字符串值,并且非空字符串值在 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
关于linux - 为什么 if 语句总是为真?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47658580/