tl;dr
declare -f foo # works in zsh and bash
typeset -f foo # works in zsh, bash, and ksh
特定の名前に対して存在するすべてのコマンド形式を出力に含めることを気にしない、または好まない場合:ありがとう、Raine Revere。
type -af # zsh only (works differently in bash and ksh)
type -f//この場合whence -f、whichそれらの目的はオペランドを関数として具体的に報告するのではなく、たまたまその名前で定義されている最も優先順位の高いコマンド形式を報告することであるため、最適ではありません。
とは言っても、実際には、これは同じ名前のエイリアスのみが優先されることを意味します (また、技術的にはシェル キーワードでもありますが、シェル キーワードの関数に名前を付けるのはおそらく悪い考えです)。
zshはデフォルトでスクリプト内のエイリアスを展開することに注意してください( は展開しますが、 は展開しませkshんbash)。最初にエイリアス展開をオフにしても、 // まだ最初にエイリアスtype -fが報告されます。whence -fwhich
ではzsh、この-fオプションは のルックアップにシェル関数のみを含めます。そのため、すべてのコマンド形式を一覧表示するために も使用しzshない限り、指定された名前によるエイリアスが唯一の出力として出力されます。-a
bashおよびではksh、type -f実際にはルックアップから関数を除外します。whenceには存在せず、関数定義bashを出力しません。は組み込みのandではなく、定義により外部ユーティリティはシェル関数を出力できません。kshwhichkshbash