Shell-Builtin
如何區分內置和外部實用程序?(例如迴聲)
一些命令作為內置和外部實用程序提供。舉個
echo
例子。在我執行 Bash 3.2 的機器 (macOS) 上,$ type echo echo is a shell builtin
跑步
man bash | less --pattern='^ *echo +\['
節目:echo [-neE] [arg ...]
但是執行
man 1 echo
顯示了一個不同實現的手冊頁echo
,具有不同的簽名:echo [-n] [string ...]
我能夠
-e
成功使用,所以我必須執行內置,大概就是這樣/bin/echo
$ which echo /bin/echo
其他實現在哪裡,我如何區分內置和外部實用程序(例如
printf
)更新/更正感謝@Gilles 澄清。證據就在布丁裡!
$ /bin/echo -e "\tabc" -e \tabc $ echo -e "\tabc" abc
要確定是否內置命令,請執行
type
.$ type echo echo is a shell builtin
type
它本身是一個內置命令,並且知道內置了哪些命令。(在 bash 中,可以禁用type
內置命令,如果已禁用內置命令,將正確報告未內置命令。)type
報告如果您使用命令將執行的任何內容name — 別名、函式、內置或外部命令。
which
是一個外部命令,它報告外部命令的位置。它對別名、函式或內置函式一無所知。根據您的設置,它甚至可能不會報告正確的外部命令。只是忘記which
並type
改用.我必須執行內置的,大概就是這樣
/bin/echo
不!根據定義,內置命令不是外部命令。與所有其他內置函式一樣,實現
echo
內置函式的程式碼位於/bin/bash
./bin/echo
是一個與內置命令同名的外部命令echo
。當命令既作為內置命令又作為外部命令存在時,使用它的名稱呼叫內置命令。命令名稱的優先順序是別名,然後是函式,然後是內置命令,然後是按順序列出的目錄中的外部命令
$PATH
。如果出於某種原因,您想強制執行外部命令,請使用其完整路徑。