使用 $USER 时回显 "root"

echo "root" when using $USER

我想更好地理解 bash 以及何时评估变量。

当使用 sudo 时,可以使用 env 检出的用户环境与根环境交换。因此 envsudo env 产生不同的结果。

现在如果我做 sudo echo "I am $USER"! 结果是 I am my-username! 而不是 I am root!,大概是因为在执行 sudo 命令之前查找了 $USER 变量。

如何使用相同的命令打印 I am root!?我是否需要一些开关或以某种方式更改字符串?

在命令sudo echo "$USER"中,bash先计算$USER然后执行命令。在这种情况下,您的用户名会被打印出来。

如果要打印root用户名,必须以root用户进行参数扩展。可以使用 bash -c 命令来完成:

sudo bash -c 'echo "$USER"'