Die Ausgabe des Shell-Skriptbefehls im If-Bedingungsvergleich schlägt fehl und kann nicht mit der gleichen Wertezeichenfolge verglichen werden.

Die Ausgabe des Shell-Skriptbefehls im If-Bedingungsvergleich schlägt fehl und kann nicht mit der gleichen Wertezeichenfolge verglichen werden.

Ich integriere ein Skript-Snippet, das die Android-Version bestimmt über: adb shell getprop ro.build.version.release was zurückgibt: 4.1.2oder4.0.4

Das Snippet sieht aktuell so aus:

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

Ich dachte, dass ADB den Wert möglicherweise über stderr zurückgibt, genau wie bei Push/Pull-Ausgaben, also habe ich auch Folgendes versucht (bin mir allerdings nicht sicher, ob das die richtige Vorgehensweise ist):

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

Habe den Operator -eq statt == ausprobiert, aber es kommt die Warnung „Ganzzahliger Ausdruck erwartet“.

Um sicherzustellen, dass tatsächlich ein Vergleich zustande kommt, habe ich Folgendes ausprobiert:

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

Habe versucht, "$variable"die Anführungszeichen zu entfernen, aber ohne Erfolg. Oben wird wie erwartet „4.0.4“ oder „4.1.2“ für ausgegeben, $versionaber bei allen obigen Versuchen wird für nichts ausgegeben $rw_path.

Was mache ich falsch?!

Dank im Voraus.

BEARBEITEN: Habe es mit doppelten Klammern versucht, wie unten vorgeschlagen, aber ohne Erfolg. Wie kommt es, dass die Ausgabe „4.0.4“ nicht mit der Zeichenfolge „4.0.4“ übereinstimmt? Sind Leerzeichen im Vergleich relevant? Kann ich die Ausgabe zuerst kürzen? Nur so ein Gedanke …

Antwort1

Ich vermute, dass die Ausgabe des adbBefehls ein "\r" enthält. Versuchen Sie

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

Antwort2

Versuchen Sie, diese Klammern um Ihre Test-Doppelklammern zu machen.

verwandte Informationen