私はO'ReillyのBash本(私の要約)の1つで次を読んだことがあります。
コマンドとアクティブ化
cd () {
echo "Improved CD !"
# Improvement one;
command cd
# Improvement two;
# Do cool stuff...
}
cd
command
このコマンドは、組み込み関数を含む関数が組み込み関数と同じ名前を持つ場合に便利です。組み込み関数内の再帰ループを防ぎます。
私の質問は、関数を一度だけ呼び出すと、最初に再帰ループが表示されるのはなぜですか?
ベストアンサー1
試してみると
cd () {
echo "Improved CD !"
# Improvement one;
cd
# Improvement two;
# Do cool stuff...
}
cd
いいえ command
、関数がcd
呼び出され、関数が関数を呼び出し、cd
関数が関数をcd
呼び出すようcd
に、cd
関数内の文は組み込み関数ではcd
なく関数を呼び出します。cd
端末で「改善されたCD!」が重複して繰り返されることがわかります。
最終結果はシェルによって異なります。 Zshが停止し(「最大ネストされた関数レベルに達しました」)、Bashがクラッシュします。