DEV Community

codemee
codemee

Posted on

echo 到底是內建指令還是外部程式?

在 shell 執行指令時, 有的指令是 shell 內建, 但有的是外部的程式, 但是倒底哪些是內建指令?哪些又是外部程式呢?我們來看一看。

在 bash 中提供有 type 指令, 可以告訴你究竟某個指令是 shell 內建還是外部程式, 例如:

$ type type
type is a shell builtin
$ type echo
echo is a shell builtin
$ type cat
cat is /bin/cat
Enter fullscreen mode Exit fullscreen mode

就可以看出來 echo 是內建指令, 而 cat 是外部程式。不過以 echo 來說, 你可能會覺得疑惑, 若是用 which 檢查, 會發現系統上的確有個外部程式叫做 echo:

$ which echo
/bin/echo
$ /bin/echo "hello"
hello
Enter fullscreen mode Exit fullscreen mode

那麼到底我們執行 echo 的時候, 是執行內建的指令還是外部的程式呢?這可以透過加上 -a 選項的 type 指令來查證:

$ type -a echo
echo is a shell builtin
echo is /bin/echo
Enter fullscreen mode Exit fullscreen mode

你可以看到 type 會告訴你 echo 是內建指令, 也是一個外部程式, 當你執行 echo 時, shell 會以這個列表中的第一項優先執行, 所以執行的就是內建的指令。

如果你真的對執行到外部程式很感冒, 也可以在同時有內建指令與同名的外部程式時使用 builtin 指令強制執行內建的指令, 例如:

$ builtin echo "hello"
hello
$ builtin cat .profile
bash: builtin: cat: not a shell builtin
Enter fullscreen mode Exit fullscreen mode

如果要求 builtin 執行的不是內建指令, 它會明確告知, 而且不會嘗試用外部同名的程式來取代。

如果想知道到底 bash 有哪些內建的指令, 可以參考Bash Builtin Commands

Top comments (0)