bash + 如何验证字符串是否为布尔值

bash + how to validate if string is boolean

在我的 bash 脚本中,我执行了以下语法以验证 $Val 是否为布尔值

if [[ $Val != True ]] && [[ $Val != False ]];then
    echo "sorry but Val isn't a boolean"
    exit 1
else
    echo "good state $Val is a boolean"
fi

还有其他更优雅的想法吗?

所以如果 $Val 是 TrueFalse ,那么它的状态很好 如果不是,那么我们 exit 1

当我使用 "[[ $Val != @(True|False) ]]" 时,

然后在我的 python 魅力编辑器中我得到:

使用扩展的 glob:

if [[ $Val != @(True|False) ]]; then
  echo "sorry but Val isn't a boolean" >&2
  exit 1
fi

# continue with good value of Val

旧版本的 bash 可能要求您首先使用 shopt -s extglob 显式启用扩展 glob,但较新版本暂时启用 [[ ... ]].

中的选项

标准 shell case 构造可用于此。它可以将给定的字符串与一个或多个 shell 模式匹配:

case $Val in
  True | False) echo "good state $Val is a boolean";;
  *) echo "sorry but Val isn't a boolean"; exit 1;;
esac >&2

同一案例的替代模式由 | 分隔。模式中未加引号的前导或尾随空白将被忽略。

案例列表可能为空。所以如果你只是想在匹配“True”或“False”失败后退出,你可以这样做:

case $Val in
  True | False) ;;
  *) echo "sorry but Val isn't a boolean"; exit 1;;
esac >&2