Bash条件表达式不起作用

时间:2014-02-12 21:21:51

标签: bash

$ echo $(adb shell getprop service.adb.root)
1
$ while [[ $(adb shell getprop service.adb.root) != "1" ]]; do echo -n .; done
.........^C

[[ "1" != "1" ]]应为falsewhile循环不应运行。但是,它永远运行。是什么原因和解决办法?

我正在尝试编写一个循环,它会等到连接的Android设备上的adbd守护程序以root身份重新启动。

2 个答案:

答案 0 :(得分:2)

getprop命令的结果包含回车符(ASCII 0x0d)。由于你正在制作一个字符串 - 而不是数字 - 比较,你正在有效地运行:

[[ "1" != "1\r" ]]

解决这个问题的简单方法是明确地去除回车符:

x=$(adb shell getprop  service.adb.root | tr -d '\015')

现在您的比较应该有效。

您可以通过运行确切地看到getprop返回的内容:

$ adb shell getprop  service.adb.root | od -c
0000000   1  \r  \n
0000003

答案 1 :(得分:2)

由于adb命令的输出尾随\r,您可以使用此while loop代替:

while [[ $(adb shell getprop service.adb.root) != $'1\r' ]]; do echo -n .; done

即。比较数字而不是字符串。