O valor de uma variável é avaliado como uma expressão aritmética quando é referenciada ou atribuída

0

Do manual do bash

Shell variables are allowed as operands; parameter expansion is performed before the expression is evaluated. Within an expression, shell variables may also be referenced by name without using the parameter expansion syntax. A shell variable that is null or unset evaluates to 0 when referenced by name without using the parameter expansion syntax. The value of a variable is evaluated as an arithmetic expression when it is referenced, or when a variable which has been given the integer attribute using ‘declare -i’ is assigned a value. A null value evaluates to 0. A shell variable need not have its integer attribute turned on to be used in an expression.

O que significa "O valor de uma variável é avaliado como um  expressão aritmética quando é referenciada, ou quando uma variável que  foi dado o atributo inteiro usando "declare -i" é atribuído um  valor "significa"?

A variável é assumida para ser usada como um operando em uma expressão aritmética? var=3+4 sozinho não será avaliado como uma expressão aritmética.

Você pode dar um exemplo para o caso "quando ele é referenciado", e um exemplo para o caso "quando uma variável que  foi dado o atributo inteiro usando "declare -i" é atribuído um  valor "?

Obrigado.

    
por Tim 26.07.2017 / 17:20

1 resposta

2

"Quando é referenciado" significa "quando é usado", isto é, o contexto indica que o valor da variável deve ser interpretado como um número:

$ i=Hello
$ echo ${i}
Hello
$ echo $((i + 1))
1

Aqui i obviamente contém uma string, mas como é usada em uma expressão aritmética, ela é interpretada como uma expressão aritmética. Se Hello não estiver definido ou nulo aqui, então ele se tornará 0; você pode tentar brincar com valores diferentes para i e Hello para ver os efeitos ( i=1+1 , Hello=Hello etc.).

Variáveis com o atributo integer, ou seja, variáveis declaradas usando declare -i , são forçadas a inteiros na atribuição, não em uso:

$ declare -i i
$ i=Hello
$ echo ${i}
0

Observe que, em todos esses casos, nenhum erro foi relatado.

Variáveis de atributo inteiro podem ser usadas com expressões aritméticas sem qualquer açúcar sintático:

$ declare -i i
$ i=3+4
$ echo ${i}
7

que é uma conseqüência direta do fato de que suas atribuições são interpretadas como expressões aritméticas.

    
por 26.07.2017 / 17:26

Tags