Как показать определение функции zsh (например, bash "type myfunc")?
как показать определение функции в zsh? type foo
не дает определения.
В Баш:
bash$ function foo() { echo hello; }
bash$ foo
hello
bash$ type foo
foo is a function
foo ()
{
echo hello
}
в zsh:
zsh$ function foo() { echo hello; }
zsh$ foo
hello
zsh$ type foo
foo is a shell function
4 ответов
идиома zsh whence
на -f
флаг печатает определения функции:
zsh$ whence -f foo
foo () {
echo hello
}
zsh$
в zsh,type
определяется как эквивалент whence -v
, так что вы можете продолжать использовать type
, но вам нужно будет использовать , так что which foo
даст те же результаты.
man zshbuiltins
для всех этот.
tl; dr
declare -f foo # works in zsh and bash
typeset -f foo # works in zsh, bash, and ksh
type -f
/ whence -f
/ which
are suboptimal в этом случае, потому что их цель состоит в том, чтобы сообщить форму команды с наивысший приоритет это случайно определяется на имя (если не указать -a
в этом случае все сообщаются командные формы) - в отличие от конкретной отчетности по операнду как функции.
на -f
опция не меняет этого - это только включает в себя функции оболочки в поиске.
псевдонимы и ключевые слова оболочки имеют более высокий приоритет, чем функции оболочки, поэтому в данном случае, если псевдоним foo
были и определена type -f foo
сообщали псевдоним определение.
отметим, что zsh
по умолчанию разворачивает псевдонимы в скриптах (как и ksh
, но не bash
), и даже если вы сначала отключите расширение псевдонима,type -f
/ whence -f
/ which
еще сначала сообщите псевдонимы.
Если вы не совсем уверены, что вы ищете, вы можете ввести просто
functions
и он покажет вам все функции.
обратите внимание, что иногда их много, поэтому вы можете передать программу пейджера:
functions | less
чтобы определить функцию, используйте
unfunction functionname