プログラム名を使用するように bash 関数を定義するときに知っておくべきことは何ですか?

プログラム名を使用するように bash 関数を定義するときに知っておくべきことは何ですか?

多くの場合、他のプログラムと同じ名前の関数を作成する必要がありますが、それが 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)。

シェルごとに微妙な違いはありますが、優先順位は一般的に次のようになります。

  1. 特別な組み込み
  2. 機能
  3. 組み込み
  4. コマンド$PATH(順序は組み込みで管理されるテーブル内の順序$PATHと順序に依存します)hashhash

forシェル構文内のエイリアスとキーワード ( 、if...) は、引用符で囲まれていない場合は、それらよりも先に考慮されることに注意してください。

と の順序は1、や2などの一部のシェルでは逆になります。では、 として呼び出されるときに、特殊組み込みと同じ名前で関数を定義することはできません。bashzshbashsh

関連情報