Acho que sua confusão está na palavra "referência".
Você não está referenciando a variável array após declare
; você está apenas dando o nome x
.
Para fazer referência a uma variável, você precisa colocar um $
antes do nome.
Tente pesquisar na página man bash todas as instâncias de referenc
e leia-as.
Quanto à segunda pergunta:
In
[[ -v myarr ]]
, doesmyarr
mean the array ormyarr[0]
?
Por teste, isso significa myarr[0]
.
$ declare -p myarr
bash: declare: myarr: not found
$ myarr=()
$ declare -p myarr
declare -a myarr='()'
$ echo $myarr
$ [[ -v myarr ]] && echo is set
$ [[ -v myarr[0] ]] && echo is set
$ [[ -v myarr[1] ]] && echo is set
$ myarr+=([1]=b)
$ declare -p myarr
declare -a myarr='([1]="b")'
$ echo $myarr
$ [[ -v myarr ]] && echo is set
$ [[ -v myarr[0] ]] && echo is set
$ [[ -v myarr[1] ]] && echo is set
is set
$ myarr+=([0]=q)
$ declare -p myarr
declare -a myarr='([0]="q" [1]="b")'
$ echo $myarr
q
$ [[ -v myarr ]] && echo is set
is set
$ [[ -v myarr[0] ]] && echo is set
is set
$ [[ -v myarr[1] ]] && echo is set
is set
$