if 條件比較無法與相同值字串進行比較時的 Shell 腳本指令輸出

if 條件比較無法與相同值字串進行比較時的 Shell 腳本指令輸出

我正在合併一個腳本片段,它透過以下方式確定 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"但沒有成功。上面的輸出“4.0.4”或“4.1.2”符合$version預期,但在上面的所有嘗試中,它無法輸出任何內容$rw_path

我究竟做錯了什麼?

提前致謝。

編輯:按照下面的建議嘗試了雙括號,但沒有成功。為什麼“4.0.4”輸出不等於“4.0.4”字串?相比之下,空白是否相關?我可以先修剪輸出嗎?只是一個想法...

答案1

我懷疑命令的輸出中有一個“\r” adb。嘗試

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

答案2

嘗試在測試雙括號周圍製作這些括號。

相關內容