Zsh erro de substituição ruim no zshrc

3

Eu tenho isso no meu arquivo .zhsrc:

[[ -n "${key[Home]}"    ]]  && bindkey  "${key[Home]}"    beginning-of-line     

Pressionar Home no meu teclado parece acionar o início da linha, então parece funcionar, no entanto, sempre que edito o .zshrc no vim e o salvo, o SyntasticCheck zsh informa um erro de "substituição ruim".

Isso é um erro da minha parte ou um bug no verificador de sintaxe?

Editar em resposta ao comentário:

Não, eu não recebo um erro quando Zsh inicia e sim Syntastic checker diz que o erro está nessa linha.

$ sed -n /Home/l .zshrc
key[Home]=${terminfo[khome]}$
[[ -n "${key[Home]}"    ]]  && bindkey  "${key[Home]}"    beginning-o\
f-line$

EDIT 2. Saída de zsh -vn .zshrc

Eu limpei meu arquivo .zshrc para isso:

echo OK
[[ -n "${key[Home]}"    ]]  && bindkey  "${key[Home]}"    beginning-of-line
echo OK2

Quando eu inicio meu shell, vejo OK e OK2, nenhum erro é exibido. Mas aqui está a saída do zsh -vn .zshrc

# /etc/zsh/zshenv: system-wide .zshenv file for zsh(1).
#
# This file is sourced on all invocations of the shell.
# If the -f flag is present or if the NO_RCS option is
# set within this file, all other initialization files
# are skipped.
#
# This file should contain commands to set the command
# search path, plus other important environment variables.
# This file should not contain commands that produce
# output or assume the shell is attached to a tty.
#
# Global Order: zshenv, zprofile, zshrc, zlogin

if [[ -z "$PATH" || "$PATH" == "/bin:/usr/bin" ]]
then
        export PATH="/usr/local/bin:/usr/bin:/bin:/usr/games"
fi
echo OK
[[ -n "${key[Home]}"    ]]  && bindkey  "${key[Home]}"    beginning-of-line
.zshrc:2: bad substitution

Editar 3

Versão: zsh 5.0.7 (x86_64-pc-linux-gnu)

    
por artfulrobot 24.08.2017 / 10:21

1 resposta

4

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 .

    
por 25.08.2017 / 09:00

Tags