Shell 脚本命令输出在 if 条件比较中与相同值字符串进行比较失败

Shell 脚本命令输出在 if 条件比较中与相同值字符串进行比较失败

我正在合并一个脚本片段,它通过以下方式确定 Android 版本: adb shell getprop ro.build.version.release 返回:4.1.24.0.4

该代码片段目前如下所示:

if [ "$(adb shell getprop ro.build.version.release)" == "4.1.2" ]; then
    rw_path="/sdcard/"
elif [ "$(adb shell getprop ro.build.version.release)" == "4.0.4" ]; then
    rw_path="/data/local/"
fi
echo $rw_path

我认为 adb 可能会通过 stderr 返回值,就像推送/拉取输出一样,所以我也尝试了这个(但不确定这是否是正确的方法):

if [ "$(adb shell getprop ro.build.version.release 2>&1)" == "4.1.2" ]; then
    rw_path="/sdcard/"
elif [ "$(adb shell getprop ro.build.version.release 2>&1)" == "4.0.4" ]; then
    rw_path="/data/local/"
fi
echo $rw_path

尝试使用 -eq 运算符代替 ==,但它警告“预期整数表达式”。

然后我尝试这样做以确保它确实比较了一些东西:

version=$(adb shell getprop ro.build.version.release 2>&1)
if [ "$version" == "4.1.2" ]; then
    rw_path="/sdcard/"
elif [ "$version" == "4.0.4" ]; then
    rw_path="/data/local/"
fi
echo $version
echo $rw_path

尝试取消"$variable"引用,但无济于事。上面的输出结果与$version预期一致,为“4.0.4”或“4.1.2”,但在上述所有尝试中,为“”均未输出任何内容$rw_path

我究竟做错了什么?!

提前致谢。

编辑:尝试了下面建议的双括号,但没有成功。为什么“4.0.4”输出不等于“4.0.4”字符串?相比之下空格是否相关?我可以先修剪输出吗?只是一个想法……

答案1

我怀疑命令的输出中有一个“\r” adb。尝试

$(adb shell getprop ro.build.version.release | tr -d '\r')

答案2

尝试在测试双括号周围制作这些括号。

相关内容