为什么我的bash字符串比较两个相同的字符串总是错误的?

时间:2011-08-29 03:19:26

标签: bash shell logical-operators

我正在尝试编写一个简单的小脚本来查询3g连接,如果连接断开,则启动重新连接。

我的问题是检查命令的输出 - 两个看似相等的字符串不被评估为相等。我确定这里有一个noob错误!

#!/bin/bash

echo "Checking connection"
a="Not connected."
b=$(./sakis3g status --console)

if [[ "$a"!="$b" ]]; then 
    echo "Strings not equal:"
    echo "$a"
    echo "$b"
else 
    echo "Strings equal!!"
fi

运行时的输出:

user@mypc:~$ ./test_3g.sh 
Checking connection
Strings not equal:
Not connected.
Not connected.

运行./test_3g.sh | cat -A时:

user@mypc:~$ ./test_3g.sh | cat -A
Checking connection$
Strings not equal:$
Not connected.$
Not connected.$

3 个答案:

答案 0 :(得分:26)

你必须在运营商周围加上空格:

if [[ "$a" != "$b" ]]; then ...

如果没有空格,您最终会得到一个字符串,相当于"$a!=$b"。如果该字符串非空,则只测试一个字符串返回true ...

答案 1 :(得分:5)

使用case/esac。如果你不必弄乱if/else的细微差别

case "$a" in
"$b" ) echo "ok";;
*) echo "not ok";;
esac

答案 2 :(得分:0)

可能sakis3g程序打印消息到stderr而不是stdout。在这种情况下,您将消息与空字符串进行比较。尝试将stderr重定向到stdout:

b=$(./sakis3g status --console 2>&1)