算術エラー - ARCHIVEがtrueと表示されるのはなぜですか? [コピー]

算術エラー - ARCHIVEがtrueと表示されるのはなぜですか? [コピー]

編集:最初はこれが範囲の問題だと思いました。実際の問題を反映してタイトルを更新しました。

以下にMREを作成しました。

#!/bin/bash

while getopts a OPTION
do
  case ${OPTION} in
    a)
      echo "archive case"
      ARCHIVE=true
      ;;
    ?)
      echo "error"
      ;;
  esac
done

if [[ "${ARCHIVE}" -eq true ]]
then
  echo "it's archived"
else
  echo "It's not archived"
fi

「./script.sh」を実行すると「Archived」戻り値が得られますが、「./script.sh -a」を実行すると出力に「Archived Case」と「Archived」が表示されます。

ここで何が起こっているのか教えてくれる人はいますか? Case文が有効な場合、ARCHIVE変数を作成するのはなぜですか?

ご協力ありがとうございます。

答え1

ここでの問題は範囲指定では[[ "${ARCHIVE}" -eq true ]]ありません山水テストし、両方の文字列の合計が算術をゼロと${ARCHIVE}評価する可能性が高いです。true

望むかもしれません[[ "${ARCHIVE}" == true ]]。 LHSの二重引用符は必ずしも必要ではありませんが、以下を参照してください。いつ二重引用符が必要ですか?

また、見ることができます条件付き構造: [[...]]

関連情報