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 身份重新启动。

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

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

相关内容

  • 没有找到相关文章

最新更新