Bash 5.2中[[..]]条件语句的then前分号是否已变为可选?
Bash 5.2中
if语句省略then前分号不报错的原因分析 先看测试脚本:
#!/bin/bash TEST_VAR="" if [[ -z $TEST_VAR ]] then echo "empty" else echo "$TEST_VAR" fi
现象解析
- 解析器确实做了变更:Bash 5.2调整了
if语句的语法解析逻辑,允许在条件表达式(比如[[ -z $TEST_VAR ]])闭合后,直接跟then而无需添加分号。这是针对语法解析环节的兼容性优化,适配部分用户省略分号的书写习惯。 - 变更说明易被忽略:这个调整属于小范围的语法兼容修复,没有在官方Release Notes中单独列出,而是被归类到“语法解析器改进”或“兼容性修复”这类汇总条目里,所以不容易找到单独的说明。
- 属于有意变更:从后续Bash版本(如5.3)仍保留该特性来看,这是开发团队有意做出的兼容调整,并非Bug。官方通过放宽语法约束,提升了脚本书写的灵活性。
内容的提问来源于stack exchange,提问作者Chad Feller
相关产品推荐
相关产品推荐

