echo -e 在 ubuntu 上由 root 用户在脚本中运行时的行为不同

use*_*172 3 bash scripting ubuntu echo

在 ubuntu 9.10 上运行 bash 脚本时,我从 bash echo 的“-e”选项得到不同的行为,具体取决于我是否以 root 身份运行。

考虑这个脚本:

$ cat echo-test
if [ "`whoami`" = "root" ]; then
  echo "Running as root" 
fi
echo Testing /bin/echo -e
/bin/echo -e "foo\nbar"
echo Testing bash echo -e
echo -e "foo\nbar"
Run Code Online (Sandbox Code Playgroud)

以非 root 用户身份运行时,我看到以下输出:

$ ./echo-test 
Testing /bin/echo -e
foo
bar
Testing bash echo -e
foo
bar
Run Code Online (Sandbox Code Playgroud)

以 root 身份运行时,我看到以下输出:

$ sudo ./echo-test 
Running as root
Testing /bin/echo -e
foo
bar
Testing bash echo -e
-e foo
bar
Run Code Online (Sandbox Code Playgroud)

注意“-e”在最后一种情况下被回显(“-e foo”而不是倒数第二行的“foo”)。当以 root 身份运行脚本时,echo 命令运行时就像给出了“-e”一样,如果给出了 -e,则回显选项本身。

我可以理解 /bin/echo 和 bash echo 在行为上的一些细微差别,但我希望 bash echo 无论哪个用户调用它的行为都相同。

有谁知道为什么会这样?这是 bash echo 中的错误吗?

仅供参考 - 我正在运行 GNU bash,版本 4.0.33(1)-release (x86_64-pc-linux-gnu)

zed*_*xff 5

你确定你的用户和 root 都使用 bash 作为他们的 shell?尝试将“shebang”行 (#!/bin/bash) 作为第一行放在脚本中,然后再次运行它