Назад | Перейти на главную страницу

Вывод команды сценария оболочки в случае, если сравнение условий не удается сравнить с той же строкой значения

Я включаю фрагмент скрипта, который определяет версию 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.

Что я делаю не так?!

Заранее спасибо.

РЕДАКТИРОВАТЬ: Пробовали двойные скобки, как предложено ниже, безуспешно. Почему результат "4.0.4" не равен строке "4.0.4"? Уместны ли пробелы в сравнении? Могу я сначала обрезать вывод? Просто мысль...

Я подозреваю, что на выходе adb команда. Пытаться

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

Попробуйте сделать эти скобки вокруг двойных скобок для теста.