Usando arrays no ZSH

0

Eu tenho a seguinte declaração:

TOKENARRAY=($TOKEN)

$TOKEN é uma variável numérica.

Se eu tentar isso:

echo ${TOKENARRAY[0]}

mostra-me uma string vazia.

Se eu fizer:

echo ${TOKENARRAY:0}

mostra-me o token

Mas o mais estranho é que, se eu fizer isso:

echo ${TOKENARRAY[1]}

mostra-me o token.

O que está acontecendo aqui? Este script deve funcionar no bash, mas não está funcionando em zsh.

    
por Henrique Barcelos 24.08.2016 / 18:48

1 resposta

1

Esse comportamento pode surpreendê-lo, dependendo do seu histórico de programação, mas é o desejado.

De man zshparam sobre o formulário ${TOKENARRAY[exp]} :

A subscript of the form [exp] selects the single element exp, where exp is an arithmetic expression which will be subject to arithmetic expansion as if it were surrounded by $((...)). The elements are numbered beginning with 1, unless the KSH_ARRAYS option is set in which case they are numbered from zero.

A sintaxe ${TOKENARRAY:0} está documentada em man zshexpn :

${name:offset} (...) A positive offset is always treated as the offset of a character or element in name from the first character or element of the array (this is different from native zsh subscript notation). Hence 0 refers to the first character or element regardless of the setting of the option KSH_ARRAYS.

Então, em princípio, isso dá a sua matriz completa (não apenas o primeiro elemento), começando pelo primeiro caractere.

Então, quando você diz

This script is supposed to work in bash, but it's not working in zsh.

você pode querer considerar emulate sh em seu script, que ativa a opção KSH_ARRAY além de outras ( emulate -l sh fornece uma lista) ou apenas setopt KSH_ARRAYS .

    
por 24.08.2016 / 20:53