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 -f
which
ではzsh
、この-f
オプションは のルックアップにシェル関数のみを含めます。そのため、すべてのコマンド形式を一覧表示するために も使用しzsh
ない限り、指定された名前によるエイリアスが唯一の出力として出力されます。-a
bash
およびではksh
、type -f
実際にはルックアップから関数を除外します。whence
には存在せず、関数定義bash
を出力しません。は組み込みのandではなく、定義により外部ユーティリティはシェル関数を出力できません。ksh
which
ksh
bash