Isso foi um erro em algumas versões antigas do zsh
corrigido em 5.1. Changelog:
2015-07-15 Barton E. Schaefer
- 35799: Src/params.c: with NO_EXEC, parse parameter subscript expressions to correctly balance enclosing braces, but do not perform the subscripting
após foi denunciado no mesmo dia.
Com essas versões, pode ser reproduzido com:
$ zsh -nc '${a[1]}'
zsh:1: bad substitution
De acordo com git bisect
, o bug foi introduzido em 2011 em correção de um problema semelhante para associações arrays no commit dfc26195c916d54163a3f0dd2eb159db2d974569 , iniciando com a versão zsh-4.3.12
Mais geralmente, zsh -n
(ou anyshell -n
) é bastante limitado em sua capacidade de codificar códigos, já que, como não está executando o código, não pode fazer muito em áreas onde a maneira como alguns códigos são avaliados depende de alguns código que foi executado de antemão.
Por exemplo, ${a[1+]}
é inválido para uma matriz, mas OK para um hash. Sem saber qual zsh -n
simplesmente não reclama.
Ele também pode fornecer falsos positivos, como em:
alias aslongas=while
aslongas whatever; do
something
done
Onde ele reclama do do
inesperado porque não reconheceu aslongas
como um alias para while
.