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

Joh*_*yon 9 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
Run Code Online (Sandbox Code Playgroud)

运行时的输出:

user@mypc:~$ ./test_3g.sh 
Checking connection
Strings not equal:
Not connected.
Not connected.
Run Code Online (Sandbox Code Playgroud)

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

user@mypc:~$ ./test_3g.sh | cat -A
Checking connection$
Strings not equal:$
Not connected.$
Not connected.$
Run Code Online (Sandbox Code Playgroud)

sth*_*sth 26

你必须在运营商周围放置空格:

if [[ "$a" != "$b" ]]; then ...
Run Code Online (Sandbox Code Playgroud)

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

  • 没有空格,表达式是单个字符串""未连接.!=未连接."`.作为bash表达式,如果字符串的长度不为零,则将其视为true; `[[STRING]]`相当于`[[-n STRING]]`.(`info bash`,搜索`\ [\ [`,然后按照音符"Bash Conditional Expressions".) (3认同)

gho*_*g74 5

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

case "$a" in
"$b" ) echo "ok";;
*) echo "not ok";;
esac
Run Code Online (Sandbox Code Playgroud)