【发布时间】:2012-06-19 10:35:28
【问题描述】:
这里发生了什么:
$ 回声 $SHELL /bin/bash $ 回声 -e "foo" 富 $哪个回声 /bin/回声 $ /bin/echo -e "foo" -e 富最后一个输出应该是“foo”,就像直接使用echo时一样。
【问题讨论】:
-
然后确保执行的是 bash 内置 echo:
bash echo -e "foo"
这里发生了什么:
$ 回声 $SHELL /bin/bash $ 回声 -e "foo" 富 $哪个回声 /bin/回声 $ /bin/echo -e "foo" -e 富最后一个输出应该是“foo”,就像直接使用echo时一样。
【问题讨论】:
bash echo -e "foo"
/bin/echo 是一个程序,它不同于 Bash 内置的echo 命令。
根据POSIX standard,echo 不应该带任何参数。 Bash echo 命令不遵循此标准,GNU Coreutils 版本也不遵循。其他版本可能更严格。
尝试通过使用--version 标志调用/bin/echo 来找出它是什么版本,或者查看它是否可以通过--help 标志为您提供一些帮助。
另外,man which 显示:
which 返回将被执行的文件(或链接)的路径名 在当前环境中,它的参数是否作为命令给出 严格符合 POSIX 的外壳。
Bash 不严格遵守 POSIX,因此 which 的返回值可能不同(在这种情况下确实如此,因为 echo 内置)。
如需进一步阅读,请查看echo outputs -e parameter in bash scripts. How can I prevent this?的答案
【讨论】:
type echo 显示“echo 是内置的 shell”。 (至少对我来说。)