我不小心取消了 $PATH。为什么“回声”仍然有效?

Jon*_*Jon 22 command-line bash

所以我在那里。试图附加到$PATH. 哦哦!我不小心取消了$PATH!不管什么原因我跑了

$ ls
bash: ls: command not found
Run Code Online (Sandbox Code Playgroud)

值得期待。然后我跑了

$ echo $PATH
$PATH:/home/jon/.local/bin
Run Code Online (Sandbox Code Playgroud)

echo某种特殊情况吗?为什么不开$PATH?它内置于 bash 吗?

Min*_*ack 62

echo是一个内置的 bash。它不使用$PATH来查找echo程序,而是使用 bash 自己的版本echo而不是echo位于您的程序中的程序$PATH

在此处阅读更多信息: Bash Builtins(Bash 参考手册)

  • @waltinator 除了,如果你把它叫做`/bin/echo`,不管`PATH`它仍然可以工作,如果你把它叫做`echo`,你会得到内置而不是`/bin/echo` :) (13认同)
  • 还有`/bin/echo`,当OP取消设置`$PATH`时它会消失 (2认同)

Mr *_*ner 25

除了 Minijack 提到的内容之外,您还可以使用type内置命令检查命令是什么。

$ type echo
echo is a shell builtin
Run Code Online (Sandbox Code Playgroud)

另一方面,which可用于专门检查可执行文件。一旦你取消设置 $PATH,你会得到类似的东西

$ which echo
/usr/bin/which: no echo in ((null))
Run Code Online (Sandbox Code Playgroud)

而根据您的路径设置,您会得到

/usr/bin/echo
Run Code Online (Sandbox Code Playgroud)

您可以检查man builtins各种内置函数的列表和描述。例如,[test也是内置函数。

编辑:which即使没有 PATH 也适用于我,因为别名使用了绝对路径

  • 没有`PATH`,连`which`都找不到,对吧? (7认同)
  • 没有理由使用 `which`。如果您想了解可执行文件,请使用 [`type`](https://www.gnu.org/software/bash/manual/html_node/Bash-Builtins.html#index-type) 和 `-a`、` -P` 或 `-p`。 (4认同)