![算術エラー - ARCHIVEがtrueと表示されるのはなぜですか? [コピー]](https://linux33.com/image/228437/%E7%AE%97%E8%A1%93%E3%82%A8%E3%83%A9%E3%83%BC%20-%20ARCHIVE%E3%81%8Ctrue%E3%81%A8%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%82%8B%E3%81%AE%E3%81%AF%E3%81%AA%E3%81%9C%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
編集:最初はこれが範囲の問題だと思いました。実際の問題を反映してタイトルを更新しました。
以下に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の二重引用符は必ずしも必要ではありませんが、以下を参照してください。いつ二重引用符が必要ですか?。
また、見ることができます条件付き構造: [[...]]。