シェルスクリプトのif条件を満たすことができません。

シェルスクリプトのif条件を満たすことができません。

次のシェルスクリプトを実行しようとしています。

function Check_Status () {

       if [[ "$(adb shell getprop sys.boot_completed)" =~ "adb: no devices/emulators found" ]]; 
       then
          echo "here"

       else 
            echo "im here"
       fi;
};

Check_Status

次の出力が表示されます。 「I am here」の代わりに「here」が表示されると予想しました。

スクリーンショット

何が欠けているのかわからない

答え1

写真のテキストそうだはい、スクリプトと同じです。しかし、一枚の写真だけでは確かにわかりにくいです。

ただし、スクリプトを実行するときにテキストが端末にどのように到着するかを確認してください。コマンド置換は出力をキャプチャする必要があり、キャプチャした内容は印刷されません。adbメッセージは標準に従って印刷できます。間違いは標準出力ではないため、キャプチャされません。

次のようにこれを確認できます。

echo "running the command substitution... (errors would print after this line)"
output=$(adb shell getprop sys.boot_completed)
echo "captured output (stdout): '$output'"

そしてそこから何が出てくるのか見てください。

これが実際に問題の場合は、コマンドオーバーライドでstderrをstdoutにリダイレクトする必要があります。

if [[ "$(adb shell getprop sys.boot_completed 2>&1)" =~ "adb: no devices/emulators found" ]]; then
    ...

関連情報