最可靠方式是用 id -u 检查 uid 是否为 0,因其内核级定义、不依赖环境变量、兼容所有 posix shell;whoami 次之,语义清晰但需防空用户名;$uid 最快但仅限 bash/zsh;禁用 $user 或提示符判断。

最直接可靠的方式是检查当前用户的 UID 是否为 0 —— 因为 root 用户的 UID 恒为 0,这是内核级定义,不会受环境变量或用户名篡改影响。
用 id -u 判断(推荐)
执行命令:
if [ $(id -u) -eq 0 ]; then echo "是 root"; else echo "不是 root"; fi
- 简洁、高效,不依赖 $USER 或 $UID 变量(它们可能被意外修改)
- 适用于所有 POSIX 兼容 shell(bash、sh、dash 等)
- 在脚本中可直接嵌入条件判断,无需额外解析输出
用 whoami 比较用户名
执行命令:
if [ "$(whoami)" = "root" ]; then echo "是 root"; else echo "不是 root"; fi
- 语义清晰,易读性强
- 依赖
whoami命令返回值,该命令本身调用 getpwuid(getuid()),本质仍基于 UID,可靠性高 - 注意:需确保字符串比较使用双引号包裹
$(whoami),防止空用户名导致语法错误
检查 $UID 变量(仅限 bash/zsh)
执行命令:
if [ "$UID" -eq 0 ]; then echo "是 root"; else echo "不是 root"; fi
- Shell 内置变量,速度最快
- 但仅在 bash、zsh 等支持该变量的 shell 中有效;dash、ash 等轻量 shell 不提供 $UID
- 不建议用于需兼容多种 shell 的通用脚本
避免踩坑的提醒
不要仅靠提示符(如 # 或 $)或 $USER 变量判断:
-
$USER是普通环境变量,可被用户随意修改(例如USER=xxx),不具备权威性 - 提示符样式由 PS1 控制,完全可自定义,不能作为判断依据
- 用
id | grep "uid=0(root)"虽可行,但属冗余解析,效率低且易因输出格式变化失效











