$+functions[_expand-aliases]
é 1 se a matriz associativa functions
contiver a chave _expand-aliases
e 0 caso contrário. Isso é descrito no manual como ${+name}
. Sob a entrada para ${name}
, o manual explica que as chaves são opcionais. Não creio que o manual indique explicitamente que você pode usar um nome de matriz com um subscrito em vez de um nome. O manual do zsh não é uma leitura fácil.
A matriz functions
é uma matriz associativa "mágica" vinculada às definições de função. Definir uma função adiciona um elemento a essa matriz, em que a chave é o nome da função e o valor é o corpo da função, normalizado. Por outro lado, adicionar um elemento à matriz define uma função com o nome e o corpo especificados.
unset 'functions[_expand-aliases]' # unset any previous function
functions[_expand-aliases]=$BUFFER # define a function whose body is the content of the command line
(($+functions[_expand-aliases])) && # if the command line is a syntactically correct function body, then …
BUFFER=${functions[_expand-aliases]#$'\t'} && # set the command line to the normalized function definition
CURSOR=$#BUFFER # move the cursor to the end of the command line
Se functions
fosse uma matriz comum, isso não alteraria o valor de BUFFER
(exceto para separar uma guia principal) e o teste na terceira linha sempre seria verdadeiro. Mas por causa da natureza “mágica” de functions
, o que você ganha com isso não é o que você coloca, é uma versão normalizada - em particular, com aliases expandidos. O teste na terceira linha falhará se a definição da função não estiver sintaticamente correta.