Bashが関数で使用されたlsコマンドに--color = autoを自動的に挿入するのはなぜですか?

Bashが関数で使用されたlsコマンドに--color = autoを自動的に挿入するのはなぜですか?

私はこのsetupファイルを持っています:

function latest { 
    count=${1:-5} ; 
    echo "Just changed"
    ls -lrtd * | tail -$count ; 
}

私はそれをそう呼ぶ:

. setup

latest次にbashに関数が定義されているかどうかを尋ねます。

>type latest
latest is a function
latest () 
{ 
    count=${1:-5};
    echo "Just changed";
    ls --color=auto -lrtd * | tail -$count
}

Just changedlatest他のファイルの定義を見ていないことを確認するために使用する任意の文字列です。

問題はBashが--color=autoコマンドに追加する理由ですls(とにかく出力がパイプで接続されているので役に立ちません)。はい、私のシェルでは、エイリアスはlsですls --color=auto。エイリアスを削除すると、これは発生しません。しかし、関数内ではエイリアスは使用されていないと思いますが、どのような場合でも関数定義時にこれらの置換が発生しますか?

ベストアンサー1

文書化された動作を観察します。Bash マニュアルのエイリアスセクション:

エイリアスは、関数定義自体がコマンドであるため、関数が実行されるのではなく、関数定義を読み取るときに拡張されます。

おすすめ記事