aliasとシェル関数の違いについてのメモ。 たとえばgrepコマンドを常にロケール非依存にて扱い処理を高速化するにあたり、一見、次の二つの定義は同等に見える。 alias grep='LC_ALL=C grep --color=auto' grep() { LC_ALL=C command grep --color=auto "$@" } しかし、これらは実際は異なる。 具体的には、aliasはインタラクティブモードの場合のみ機能し、シェル関数は非インタラクティブモードにおいても参照される。 また、同名のシェル関数とエイリアスが存在する場合、まずエイリアスが展開された後、シェル関数が実行される。 したがって、常にコマンドそのものを置き換えたい場合はシェル関数、端末から実行した場合のみ置き換えたい場合はaliasを使うことが好ましい。 たとえば、grepにおいてロケールは常に無視したい、色