web-dev-qa-db-ja.com

条件比較が同じ値の文字列と比較できない場合のシェルスクリプトコマンドの出力

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"の引用を解除してみましたが運が悪かったです。上記は、期待どおり$versionに対して「4.0.4」または「4.1.2」を出力しますが、上記のすべての試行で、$rw_pathに対して何も出力できません。

私は何が間違っているのですか?!

前もって感謝します。

編集:運が悪かったので、以下に提案するようにダブルブラケットを試しました。 「4.0.4」の出力が「4.0.4」の文字列と等しくないのはなぜですか?比較して空白は関係がありますか?最初に出力をトリミングできますか?ちょっとした考え...

3

adbコマンドの出力に「\ r」があると思います。試してみてください

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

7
Mark Wagner

テストダブルブラケットの周りにそれらのブラケットを作ってみてください。

0
Basil