我不确定为什么,但是使用if
比较字符串时,比较结果无法正确评估。
我尝试将脚本简化为非常基本的字符串比较测试
\#!/bin/sh
if [ "blah"="hello" ]; then
echo "blah"
fi
if [ "hello"="hello" ]; then
echo "hello"
fi
我期望输出一行:hello
。
我得到的是:
blah
hello
答案 0 :(得分:3)
此命令:
[ "blah"="hello" ]
使用参数[
和blah=hello
运行]
;因此条件表达式是单个字符串blah=hello
,它是正确的(因为它是一个非空字符串),因此该命令返回成功,并且运行if
块中的代码。>
您要写的是:
[ blah = hello ]
传递blah
,=
和hello
作为三个单独的参数,并测试blah
和hello
是否相等。由于不是,命令将返回失败,并且if
块中的代码不会运行。
更广泛地讲-您似乎误解了Bash的"..."
表示法。您可能会使用双引号来表示字符串的开头和结尾(与其他各种语言一样),但是它们的真正作用是“转义”各种特殊字符,否则这些特殊字符会具有特定的含义。由于blah
不包含任何特殊字符,因此"blah"
和blah
是同一个人。