使用awk提取gcc版本号时返回空字符串,该如何排查解决?
问题原因
你编写的awk命令中使用的正则规则/^[0-9]\.[0-9]\.[0-9]$/仅支持匹配每个版本段为单个数字的版本号(例如7.5.0、9.3.0这类格式),而当前你安装的gcc版本为11.1.0,主版本号有两位数字,无法命中正则规则,因此命令没有返回结果。
解决方法
- 方案一:修改原命令的正则规则,将单数字匹配改为匹配一位及以上数字即可兼容多数字版本号:
gcc --version | head -1 | awk '{for(i=1;i<=NF;i++){ if(match($i,/^[0-9]+\.[0-9]+\.[0-9]+$/)) {print $i; exit 0}}}'
- 方案二:简化解析逻辑,英文环境下
gcc --version输出的第一行第三个字段固定为版本号,可直接输出对应字段:
gcc --version | awk 'NR==1{print $3}'
- 方案三:无需解析文本输出,直接调用gcc内置参数获取版本号,适配所有系统语言环境,稳定性最高:
# 输出完整版本号,例如11.1.0 gcc -dumpfullversion # 输出主次版本号,例如11.1 gcc -dumpversion
内容的提问来源于stack exchange,提问作者mahmood
相关产品推荐
相关产品推荐

