Linux 为什么这句话总是正确的?

Linux 为什么这句话总是正确的?,linux,syntax,Linux,Syntax,我想检查输入参数是否以“.c”(“*.c”)结尾。发布代码中的条件始终为true, 因为您在[…]中拥有的“$x”=“*.c”被shell解释为单个非空字符串值,而非空字符串值在Bash中是真实的 但为什么这是一个“单个非空字符串值”?那=符号呢 要将其视为内置的[…]的条件运算符,必须在=符号周围放置空格。否则shell不会将其识别为运算符 也就是说,这样写(同时修复其他语法错误): 这将使条件不总是真实的,但它仍然不能满足您的要求。要检查变量是否以.c结尾,您需要使用[…]内置代码以不同的方

我想检查输入参数是否以“.c”(“*.c”)结尾。

发布代码中的条件始终为true, 因为您在
[…]
中拥有的
“$x”=“*.c”
被shell解释为单个非空字符串值,而非空字符串值在Bash中是真实的

但为什么这是一个“单个非空字符串值”?那
=
符号呢

要将其视为内置的
[…]
的条件运算符,必须在
=
符号周围放置空格。否则shell不会将其识别为运算符

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

这将使条件不总是真实的,但它仍然不能满足您的要求。要检查变量是否以.c结尾,您需要使用
[…]
内置代码以不同的方式编写它:

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

a) 没有代码为b)的图片,即使有,我们也不欣赏图片中的代码。请键入否,您上载了一个4kB的图像,其中的文本可以用40字节的可解析、可编辑和可搜索文本写入,因为您分配了:
=
,而不进行比较:
=
。尝试将代码中的
=
替换为
=
==不工作,我刚刚尝试过,对不起,pic我在添加代码时遇到问题,
if [ "$x" = "*.c" ]; then echo "$x"; else echo "not .c"; fi
if [[ "$x" == *.c ]]; then echo "$x"; else echo "not .c"; fi