Я включаю фрагмент скрипта, который определяет версию Android через:
adb shell getprop ro.build.version.release
который возвращает: 4.1.2
или4.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, как он это делает с выводом push/pull, поэтому я попробовал еще и это (хотя не уверен, что это правильный способ):
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
.
Что я делаю не так?!
Заранее спасибо.
EDIT: Пробовал двойные скобки, как предложено ниже, но безуспешно. Почему вывод "4.0.4" не равен строке "4.0.4"? Имеют ли значение пробелы при сравнении? Могу ли я сначала обрезать вывод? Просто мысль...
решение1
Я подозреваю, что в выводе команды есть "\r" adb
. Попробуйте
$(adb shell getprop ro.build.version.release | tr -d '\r')
решение2
Попробуйте заключить эти скобки в двойные скобки вашего теста.