$ 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 身份重新启动。
getprop
命令的结果包含回车符 (ASCII 0x0d
)。 由于您正在进行字符串(而不是数字)比较,因此您正在有效地运行:
[[ "1" != "1r" ]]
解决此问题的简单方法是显式剥离回车符:
x=$(adb shell getprop service.adb.root | tr -d ' 15')
现在你的比较应该可以了。
您可以通过运行来准确查看getprop
返回的内容:
$ adb shell getprop service.adb.root | od -c
0000000 1 r n
0000003
由于 adb 命令的输出具有尾随r
因此您可以使用以下while loop
:
while [[ $(adb shell getprop service.adb.root) != $'1r' ]]; do echo -n .; done
即比较数字而不是字符串。