输出 macOS 的产品名称、版本号和构建号,供脚本判断系统版本。
sw_vers 不带参数输出三行:ProductName、ProductVersion、BuildVersion;-productVersion、-buildVersion、-productName 只取对应字段,-productVersionExtra 取快速安全响应(RSR)的后缀(macOS 13.3 起)。它读的是 /System/Library/CoreServices/SystemVersion.plist,与“关于本机”显示的产品版本一致。
边界:sw_vers 给的是 macOS 产品版本,uname -r 给的是 Darwin 内核版本(例如 macOS 14 对应 Darwin 23),两者不能互相推断。脚本比较版本不要用 sort -V,macOS 的 BSD sort 没有这个选项;也不要用构建号反推版本号。
# 1. 查看完整信息:产品名、版本、构建号
% sw_vers
# 2. 脚本只取版本号
% sw_vers -productVersion
% sw_vers -buildVersion
# 3. 拼成一行日志头,方便排障记录
% printf '%s (%s)\n' "$(sw_vers -productVersion)" "$(sw_vers -buildVersion)"
# 4. 查看快速安全响应后缀;没有 RSR 时通常为空,旧系统可能不支持该选项
% sw_vers -productVersionExtra
# 5. 直接读系统版本 plist,验证 sw_vers 的数据来源
% defaults read /System/Library/CoreServices/SystemVersion.plist ProductVersion
# 6. 同时对比产品版本与 Darwin 内核版本
% sysctl -n kern.osproductversion kern.osversion
% uname -r
sort -V 比较版本,在 macOS 上直接报非法选项;改用 awk -F. 逐段比较,或 sort -t. -k1,1n -k2,2n -k3,3n。ProductVersion 和 BuildVersion 混为一谈:14.6.1 是产品版本,23G93 是构建号,后者不能直接比较大小。-productVersionExtra 在没有 RSR 时通常返回空,旧系统可能不支持;set -e 脚本要先判断退出码,并允许空结果。uname -m 返回 x86_64,但 sw_vers 仍是主机 macOS;判断 Apple Silicon 用 sysctl -n hw.optional.arm64。sw_vers 不提供硬件型号;机型用 sysctl -n hw.model 或 system_profiler。system_profiler — 硬件、软件和外设的完整信息。sysctl — 读取 kern.osproductversion 等内核字段。softwareupdate — 根据当前版本检查更新。defaults — 读取系统版本 plist 和偏好域。uname — 对照内核与发行版信息查询。合上页面,先回答,再展开对照。
sw_vers -productVersion 和 uname -r 分别返回什么?能互相换算吗?sort -V 比较 macOS 版本?给出一个替代方案。-productVersionExtra 有什么用途?没有 RSR 时脚本要注意什么?sort 不支持 -V;可用 awk -F. 逐段数值比较,或 sort -t. -k1,1n -k2,2n -k3,3n。
小程序版
微信扫码,随时查命令