为什么 sh 显示错误而 bash 不显示?

fil*_*eha 4 shell-script

为什么以下脚本显示“意外操作员”消息并在使用 运行时失败sh,但使用bash.

#!/bin/sh
if [ $UID -ne 0 ]
then
        echo "You must be root."
        exit 1
else
        echo "Open sesame."
        exit 0
fi
Run Code Online (Sandbox Code Playgroud)

Gil*_*il' 7

并非所有 shell 都定义了变量UID。这只是 bash 和 zsh 功能。在其他 shell 中,UID变量未定义,因此您的测试命令扩展为[ -ne 0 ]语法错误。

获取用户 ID 的一种可移植方式是使用该id实用程序。

if [ "$(id -u)" -ne 0 ]; then …
Run Code Online (Sandbox Code Playgroud)