このサイト は、「シェル関数は[エイリアスよりも]高速です。エイリアスは関数の後に検索されるため、解決に時間がかかります。エイリアスは理解しやすいですが、ほとんどすべての目的でエイリアスよりもシェル関数が優先されます。 」
それが(真かどうかにかかわらず)与えられた場合、シェル関数はスタンドアロンシェルスクリプトとどのように比較されますか? 1つは他に比べて特定の利点がありますか、それとも特定のタイプのタスクにより適していますか?
エイリアスと関数の主な違いは、エイリアスは引数を取らない¹が、関数は引数を取るということです。 alias l='ls --color'
のようなものを書くと、l foo
はls --color foo
に展開されます。 foo
をエイリアス展開に取得して、関数で実行できる方法とは異なる方法でそれを行うことはできません。 エイリアスにパラメータを渡す方法は? も参照してください。
エイリアスはbefore関数の前に検索されます。関数とfoo
というエイリアスの両方がある場合、foo
はエイリアス。 (エイリアスfoo
が展開されている場合、一時的にブロックされるため、alias ls='ls --color'
などが機能します。また、\foo
を実行すると、いつでもエイリアスをバイパスできます。)ただし、測定可能なパフォーマンスの違いを期待することはできません。
関数とスタンドアロンスクリプトには、ほとんど同じような機能があります。ここに私が考えることができるいくつかの違いがあります:
関数とスタンドアロンスクリプトの中間にあるのは、source
または.
ビルトインで読み取るスクリプトスニペットです。関数と同様に、シェルの環境を変更でき、シェルの言語で記述する必要があります。スクリプトと同様に、スクリプトは呼び出されるたびにロードされ、すぐにはロードされません。
¹ そうですね、これはtcshには当てはまりません。