A seção PARAMETER EXPANSION
da página zshexpn
man é um bom ponto de partida.
Primeiro, vamos observar que $config_files
é uma matriz incluindo todos os arquivos .zsh
sob o diretório $ZSH
, como você pode ver na segunda linha: config_files=($ZSH/**/*.zsh)
.
Esta sintaxe usada na linha ${(M)config_files:#*/path.zsh}
(observe que M
dentro dos parênteses é chamado de sinalizador de expansão ) é a seguinte:
${name:#pattern}
If the pattern matches the value of name, then substitute the
empty string; otherwise, just substitute the value of name.
If name is an array the matching array elements are removed
(use the '(M)' flag to remove the non-matched elements).
Em outras palavras, o loop for itera em todos os arquivos path.zsh
em $ ZSH. Você também pode usar for file in $ZSH/**/path.zsh
, mas a operação na matriz de arquivos $config_files
é mais rápida do que procurar recursivamente o sistema de arquivos novamente e novamente. (Há mais para loop, não há?)
Com esse conhecimento, deve ser fácil descobrir o que o ${${config_files:#*/path.zsh}:#*/completion.zsh}
fará. (O resultado é indicado no comentário de qualquer maneira).
Eu costumo usar alguns exemplos triviais para me entender melhor:
$ array=(foo bar baz)
$ print ${array}
foo bar baz
$ print ${array:#ba*}
foo
$ print ${(M)array:#ba*}
bar baz
É mais fácil do que parece, certo ?! ;)