linux - 为什么 if 语句总是为真?

标签 linux syntax

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/

相关文章:

c - 如何使用 Linux 系统调用 read() 来控制文件的数据内容?

linux - 基本的 if else 脚本

php - 无法从 php 连接到远程 Mysql 服务器

javascript - 简单的 javascript IF 语句 - 正确的语法是什么?

ios - Swift 语法,并理解语言的某些部分

php - UTF-8贯穿始终

c# - Java隐藏: Any Way for Client Classes to Call `super` ?

Python (3.2.3) If Or 语句语法错误

python - 在 return 语句的同一行使用 if/else

c++ - CMake:带有 PRE_BUILD 的 add_custom_command 不起作用