如何简单高效比较BASH_VERSION与指定版本 实现Zsh is-at-least功能
Bash 实现 is-at-least 版本比较函数
直接在Bash中定义同名函数即可,纯内置语法实现无外部依赖,支持最多3段版本号(x.y、x.y.z格式),逐位按十进制数值比较,符合版本号比较规则:
is-at-least() { # 入参:$1=最低要求版本,$2=待比较版本(可选,默认取当前Bash版本) local req_ver cur_ver IFS=. req_ver=($1) cur_ver=(${2:-$BASH_VERSION}) # 版本段统一补全为3位,不足补0 for i in {0..2}; do [[ -z ${req_ver[$i]} ]] && req_ver[$i]=0 [[ -z ${cur_ver[$i]} ]] && cur_ver[$i]=0 done # 逐位比较,10#前缀强制按十进制解析,避免前导0被识别为八进制 for i in {0..2}; do if (( 10#${req_ver[$i]} > 10#${cur_ver[$i]} )); then return 1 elif (( 10#${req_ver[$i]} < 10#${cur_ver[$i]} )); then return 0 fi done # 所有段位相等,符合版本要求 return 0 }
使用示例
和Zsh原生is-at-least用法完全一致:
# 判断当前Bash版本是否 >= 5.7 is-at-least 5.7 && echo "You're using a version of Bash above 5.7" || echo "You're running an old Bash version. Upgrade, dude." # 手动传入待比较版本测试规则 is-at-least 1.3 1.25 && echo "1.25 >= 1.3" || echo "1.25 < 1.3" # 输出:1.25 >= 1.3,符合要求的版本比较规则
内容的提问来源于stack exchange,提问作者iconoclast
相关产品推荐
相关产品推荐

