Bashスクリプト:ブール変数が正しく機能しない

私はBashスクリプトでブール変数を評価しようとしていますが、常にfalseを返します。

ここにコードです:

DEVICE_FOUND=false
tmp=`adb devices | tail -n+2 | awk '{print $1}'`

echo "$tmp" | while read line
do
    if [ "$DEVICE_ID" = "$line" ]
    then
        echo "Found a device"
        DEVICE_FOUND=true
    fi
done

if ! $DEVICE_FOUND
then
    echo "ERROR: The device "$DEVICE_ID" is not connected"
    exit
fi

「デバイスの発見」が実行されるかどうかにかかわらず、私は常にifステートメントに入ります。 DEVICE_FOUND =
trueの場合は、最後には入りませんが、そうしてください。

私はなぜそれが分からないのですか?

誰も知っていますか?

どうもありがとうございました。

ベストアンサー

これは、 |
の後、つまりサブシェル内に真の値を設定しているためです。サブシェルからの変数値は、親シェルに伝播しません。サブシェルを取り除く:

while read line
do
    ...
done <<< "$tmp"

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です