編集:最初はこれが範囲の問題だと思いました。実際の問題を反映してタイトルを更新しました。
以下に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の二重引用符は必ずしも必要ではありませんが、以下を参照してください。いつ二重引用符が必要ですか?。
また、見ることができます条件付き構造: [[...]]。