多くの場合、他のプログラムと同じ名前の関数を作成する必要がありますが、それが bash スクリプトを使用する良い方法であるかどうかはわかりません。
例:
function echo () {
echo -n "$@" ;
}
テストした結果、bin パスの前にスクリプト内の関数名をチェックしているようです。これと、知っておくべきその他の情報について確認したいと思います。
答え1
echo() {
command echo -n "$@"
}
ここでを使用すると、優先される関数ではなく、コマンド (ここでは組み込まれています)command
を要求することになります。echo
また、ここでは組み込みコマンドでもあるため(組み込みコマンドはファイルシステム コマンドよりも優先されるため、BTWecho
では検索されません)、次のようにすることもできます。$PATH
echo() {
builtin echo -n "$@"
}
後者のアプローチは では推奨されますzsh
。 では、代わりにcommand echo
が実行されます/bin/echo
(エミュレーションを除くsh
)。
シェルごとに微妙な違いはありますが、優先順位は一般的に次のようになります。
- 特別な組み込み
- 機能
- 組み込み
- コマンド
$PATH
(順序は組み込みで管理されるテーブル内の順序$PATH
と順序に依存します)hash
hash
for
シェル構文内のエイリアスとキーワード ( 、if
...) は、引用符で囲まれていない場合は、それらよりも先に考慮されることに注意してください。
と の順序は1
、や2
などの一部のシェルでは逆になります。では、 として呼び出されるときに、特殊組み込みと同じ名前で関数を定義することはできません。bash
zsh
bash
sh