【问题标题】:bash + how to validate if string is booleanbash +如何验证字符串是否为布尔值
【发布时间】:2021-06-16 14:15:14
【问题描述】:

在我的 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 魅力编辑器中我得到:

【问题讨论】:

标签: linux bash boolean


【解决方案1】:

标准的 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

【讨论】:

    【解决方案2】:

    使用扩展的 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,但新版本会暂时启用[[ ... ]] 中的选项。

    【讨论】:

    • 由于某些不清楚的原因,我的 python 魅力 GUI 出现错误,$val 下有红线
    • 因为 PyCharm 可能试图将其解析为 Python,而不是 shell。
    • 如您所知,python charm 也可用于 shell 脚本或 bash,我所有的 bash 脚本都已正确编辑
    • 我不知道;我不使用 PyCharm,而且我所读到的任何关于它的信息都没有让我有兴趣尝试一下。但是编辑器是否理解你正在编辑的文件的语法与你是否可以用适当的解释器执行它是无关的。
    猜你喜欢
    • 2019-07-15
    • 2016-01-06
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-16
    • 1970-01-01
    相关资源
    最近更新 更多