在許多情況下,我需要建立與其他程式同名的函數,並且我不知道這是否是使用 bash 腳本的好方法。
例子:
function echo () {
echo -n "$@" ;
}
測試後看起來它會在 bin 路徑之前檢查腳本內的函數名稱。我想確定這一點以及我應該知道的任何其他資訊。
答案1
echo() {
command echo -n "$@"
}
在這裡使用command
意味著請求echo
命令(恰好是內建的)而不是函數,否則函數會優先。
由於這裡,也恰好是一個內建命令(順便說一句,由於內建命令優先於檔案系統命令,所以echo
不會在其中查找),您也可以這樣做:$PATH
echo() {
builtin echo -n "$@"
}
後一種方法在 中更可取zsh
,command echo
將在其中運行/bin/echo
(仿真除外sh
)。
shell 之間存在一些細微的差異,但優先順序通常是:
- 特殊的內建函數
- 功能
- 內建函數
- 命令
$PATH
(且順序取決於內建命令管理的表中$PATH
和表中的順序)hash
hash
請記住,shell 語法中的別名和關鍵字 ( for
, if
...) 如果未加引號,則將被視為在這些別名和關鍵字之前。
在某些 shell 中,1
和的順序是相反的,例如或。當作為 呼叫時,不允許使用與特殊內建函數相同的名稱來定義函數。2
bash
zsh
bash
sh