É um subscrito para uma matriz indexada uma expansão aritmética?

2

Citando o manual do Bash:

An indexed array is created automatically if any variable is assigned to using the syntax

name[subscript]=value

The subscript is treated as an arithmetic expression that must evaluate to a number.

É subscript

  • uma expressão aritmética ou
  • uma expansão aritmética em que $(( e )) são ignorados e apenas uma expressão aritmética está lá?

Em outras palavras, existe uma etapa de expansão aritmética aqui, assim como ao interpretar um comando com expansão aritmética?

Por exemplo,

$ declare -p myarr
declare -a myarr='([0]="0" [2]="3" [3]="9999")'

$ echo ${myarr[1+2]}
9999
$ echo ${myarr[$((1+2))]}
9999
    
por Tim 03.05.2016 / 17:10

2 respostas

1

Is there a step of arithmetic expansion [with array subscripts], just like when interpreting a command with arithmetic expansion?

Sim.

Expansão variável:

$ unset -v a
$ declare -p a
-bash: declare: a: not found
$ x=4
$ a[x]=4
$ declare -p a
declare -a a='([4]="4")'

Expansão de parâmetros:

$ six=six
$ a[${#six}]=3
$ declare -p a
declare -a a='([3]="3" [4]="4")'

Substituição de comandos:

$ a[$(echo 9)]=9
$ declare -p a
declare -a a='([3]="3" [4]="4" [9]="9")'

Citar a remoção:

$ a["5"]=5
$ declare -p a
declare -a a='([3]="3" [4]="4" [5]="5" [9]="9")'
$ a['6']=6
$ declare -p a
declare -a a='([3]="3" [4]="4" [5]="5" [6]="6" [9]="9")'
$ a[]=7
$ declare -p a
declare -a a='([3]="3" [4]="4" [5]="5" [6]="6" [7]="7" [9]="9")'

Referência

3.5.5 Arithmetic Expansion

All tokens in the expression undergo parameter and variable expansion, command substitution, and quote removal.

    
por 03.05.2016 / 21:28
0
  • Is a subscript to an indexed array an arithmetic expansion?

Para ser preciso: Não, é uma "expressão aritmética", idêntica ao que está dentro de uma "expansão aritmética", mas não possui o $(( )) .

Ambos avaliam a expressão até se tornar um número (ou um nulo).

    
por 07.05.2016 / 03:04

Tags