"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.