我的字符串比较总是评估为true

时间:2018-12-30 01:54:55

标签: bash

我不确定为什么,但是使用if比较字符串时,比较结果无法正确评估。

我尝试将脚本简化为非常基本的字符串比较测试

\#!/bin/sh

if [ "blah"="hello" ]; then
  echo "blah"
fi

if [ "hello"="hello" ]; then
  echo "hello"
fi

我期望输出一行:hello

我得到的是:

blah
hello

1 个答案:

答案 0 :(得分:3)

此命令:

[ "blah"="hello" ]

使用参数[blah=hello运行];因此条件表达式是单个字符串blah=hello,它是正确的(因为它是一个非空字符串),因此该命令返回成功,并且运行if块中的代码。

您要写的是:

[ blah = hello ]

传递blah=hello作为三个单独的参数,并测试blahhello是否相等。由于不是,命令将返回失败,并且if块中的代码不会运行。


更广泛地讲-您似乎误解了Bash的"..."表示法。您可能会使用双引号来表示字符串的开头和结尾(与其他各种语言一样),但是它们的真正作用是“转义”各种特殊字符,否则这些特殊字符会具有特定的含义。由于blah不包含任何特殊字符,因此"blah"blah是同一个人。