$ echo $(adb shell getprop service.adb.root)
1
$ while [[ $(adb shell getprop service.adb.root) != "1" ]]; do echo -n .; done
.........^C
[[ "1" != "1" ]]
应为false
且while
循环不应运行。但是,它永远运行。是什么原因和解决办法?
我正在尝试编写一个循环,它会等到连接的Android设备上的adbd守护程序以root身份重新启动。
答案 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
即。比较数字而不是字符串。