bash function zsh definition

Cómo mostrar la definición de la función zsh(como bash "type myfunc")?



function definition (4)

La expresión zsh es de whence , la bandera -f imprime las definiciones de función:

zsh$ whence -f foo foo () { echo hello } zsh$

En zsh, type se define como equivalente a whence -v , por lo que puede continuar usando type , pero necesitará usar el argumento -f :

zsh$ type -f foo foo () { echo hello } zsh$

Y, finalmente, en zsh, which se define como equivalente a whence -c - print resultados en formato csh-like , por lo which foo producirá los mismos resultados.

man zshbuiltins por todo esto.

¿Cómo se muestra la definición de una función en zsh? type foo no da la definición.

En bash:

bash$ function foo() { echo hello; } bash$ foo hello bash$ type foo foo is a function foo () { echo hello }

En zsh:

zsh$ function foo() { echo hello; } zsh$ foo hello zsh$ type foo foo is a shell function


Si no está seguro de lo que está buscando, puede escribir solo

functions

y le mostrará todas las funciones definidas.

Tenga en cuenta que a veces hay MUCHOS de ellos, por lo que es posible que desee canalizar a un programa de buscapersonas:

functions | less

para definir una función, usa

unfunction functionname


Siempre acabo de usar which para esto.


tl; dr

declare -f foo # works in zsh and bash typeset -f foo # works in zsh, bash, and ksh

type -f / whence -f / which son subóptimos en este caso , porque su propósito es informar el formulario de comando con la precedencia más alta que se define por ese nombre (a menos que también especifique -a , en cuyo caso todas las formas de comando se informan), en lugar de informar específicamente sobre el operando como una función .

La opción -f no cambia eso, solo incluye funciones de shell en la búsqueda.

Los alias y las palabras clave de shell tienen mayor prioridad que las funciones de shell, por lo que, en el caso que nos ocupa, si también se definió un alias foo , type -f foo informará la definición de alias .

Tenga en cuenta que zsh sí expande alias en scripts de manera predeterminada (como lo hace ksh , pero no bash ), e incluso si desactiva primero la expansión de alias, type -f / whence -f / which aún informe los alias primero.