Bash

如果條件比較無法與相同的值字元串進行比較,Shell 腳本命令輸出

  • September 4, 2013

我正在合併一個腳本片段,它通過以下方式確定 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”字元串?相比之下,空格是否相關?我可以先修剪輸出嗎?只是一個想法…

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

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

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

引用自:https://serverfault.com/questions/536365