if条件比較のシェルスクリプトコマンド出力が同じ値文字列との比較に失敗する

if条件比較のシェルスクリプトコマンド出力が同じ値文字列との比較に失敗する

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 経由で値を返す可能性があると思ったので、これも試してみました (ただし、これが正しい方法かどうかはわかりません)。

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」文字列と等しくないのでしょうか? 比較に空白は関係しますか? 最初に出力をトリミングできますか? 単なる考えです...

答え1

コマンドの出力に「\r」が含まれていると思われますadb

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

答え2

テストの二重括弧の周りにこれらの括弧を作成してみてください。

関連情報