Как показать определение функции 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