Saída do comando de script Shell se a comparação de condições falhar ao comparar com a mesma cadeia de valor

3

Estou incorporando um snippet de script que determina a versão do Android por meio de: %código% que retorna: adb shell getprop ro.build.version.release ou 4.1.2

O snippet atualmente é assim:

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

Eu achei que o adb poderia retornar o valor via stderr assim como faz com o push / pull, então eu tentei isso também (não tenho certeza se esse é o jeito certo de fazer isso):

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

Operador try-eq em vez de == mas avisa que "expressão inteira esperada".

Eu então tentei isso para ter certeza de que realmente compara algo:

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

Tentei unquotar 4.0.4 sem sorte. As saídas acima "4.0.4" ou "4.1.2" para "$variable" como esperado, mas em todas as tentativas acima, ele não produz nada por $version .

O que estou fazendo de errado?!

Obrigado antecipadamente.

EDIT: Tentei colchetes duplos, como sugerido abaixo, sem sorte. Como é que a saída "4.0.4" não é igual a "4.0.4"? O espaço em branco é relevante em comparação? Posso aparar a saída primeiro? Apenas um pensamento ...

    
por Vigintas Labakojis 04.09.2013 / 20:35

2 respostas

7

Suspeito que exista um "\ r" na saída do comando adb . Experimente

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

    
por 04.09.2013 / 20:58
0

Tente criar esses colchetes ao redor dos colchetes duplos de teste.

    
por 04.09.2013 / 20:44