プログラム名を使用するためにbash関数を定義するときに何を知る必要がありますか?

プログラム名を使用するためにbash関数を定義するときに何を知る必要がありますか?

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

シェル間にはわずかな微妙な違いがありますが、一般的に優先順位は次のとおりです。

  1. 特殊組み込み機能
  2. 機能
  3. 組み込み機能
  4. コマンド$PATH(そして順序は、組み込みコマンドによって管理されるテーブル内と内部の順序によって異なります$PATHhashhash

シェル構文のエイリアスとキーワード(forif...)は、引用符が付けられていない場合は前に続くものとして扱われます。

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

関連情報