如果条件比较无法与相同值字符串进行比较,则 Shell 脚本命令输出

Vig*_*jis 3 scripting unix shell bash

我正在合并一个脚本片段,它通过以下方式确定 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
Run Code Online (Sandbox Code Playgroud)

我认为 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
Run Code Online (Sandbox Code Playgroud)

尝试了 -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
Run Code Online (Sandbox Code Playgroud)

尝试取消引用"$variable"没有运气。上面的输出“4.0.4”或“4.1.2”$version正如预期的那样,但在上面的所有尝试中,它未能输出任何内容$rw_path

我究竟做错了什么?!

提前致谢。

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

Mar*_*ner 7

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

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