算术错误 - 为什么 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”时,我得到返回值“已存档”,但是当我运行“./script.sh -a”时,输出显示“存档案例”和“已存档”。

有人能告诉我这里发生了什么事吗?如果 case 语句有效,为什么还要创建 ARCHIVE 变量?

感谢您的帮助。

答案1

这里的问题不是范围界定——[[ "${ARCHIVE}" -eq true ]]而是算术测试,并且很可能两个字符串${ARCHIVE}true都在算术上评估为零。

您可能想要[[ "${ARCHIVE}" == true ]]- 尽管请注意 LHS 上的双引号并不是严格必要的,请参阅什么时候需要双引号?

也可以看看条件结构:[[...]]

相关内容