Bash中如何更优雅地验证字符串是否为布尔值True/False
Bash布尔值校验优化方案
你尝试的[[ $Val != @(True|False) ]]写法属于Bash扩展通配符语法,需要提前开启extglob选项才能正常使用,PyCharm的报错属于编辑器默认Shell语法校验未开启extglob支持导致的误报,不是代码本身的逻辑问题。
下面是几种更优雅的实现方案:
方案1:开启extglob使用模式匹配
需要在脚本头部或者匹配逻辑前开启扩展通配符选项:
# 开启Bash扩展通配符 shopt -s extglob if [[ $Val != @(True|False) ]];then echo "sorry but Val isn't a boolean" exit 1 fi echo "good state $Val is a boolean"
如果要消除PyCharm的报错,可以在编辑器设置中搜索「Shell Script」,找到Extglob相关的支持选项打开即可。
方案2:使用正则匹配(无需额外开启扩展)
用Bash内置的正则匹配运算符实现,兼容性更好,大部分编辑器默认就能识别不会报错:
# ^和$确保严格匹配整个变量值,避免部分匹配的误判 if ! [[ $Val =~ ^(True|False)$ ]]; then echo "sorry but Val isn't a boolean" exit 1 fi echo "good state $Val is a boolean"
方案3:case语句(兼容POSIX标准)
如果你的脚本需要兼容POSIX Shell而不仅限于Bash环境,可以用case语句实现,性能和兼容性都最优:
case "$Val" in True|False) echo "good state $Val is a boolean" ;; *) echo "sorry but Val isn't a boolean" exit 1 ;; esac
内容的提问来源于stack exchange,提问作者jessica
相关产品推荐
相关产品推荐

