J’essaye de tester si une valeur appartient à un tableau. Il doit y avoir une monstrueuse coquille, mais je ne la voit pas.
#!/usr/bin/awk -f
BEGIN {
a[1]="Hello"
a[2]=" World"
a[3]=" !"
for ( ndx in a )
printf("%s",a[ndx])
print "\n"
# Pourquoi le test ci-dessous n'affiche rien ?
if ( "Hello" in a )
printf( "=> %s",a[1])
}
Le tableau est pourtant bien rempli et son contenu affiché.
michel@debG53SW:~$ a[1]="Hello";a[2]="World";a[3]="!"
michel@debG53SW:~$ for elem in ${a[@]}; do echo "\"$elem\""; done
"Hello"
"World"
"!"
michel@debG53SW:~$ for elem in ${a[*]}; do echo "\"$elem\""; done
"Hello"
"World"
"!"
michel@debG53SW:~$ for elem in "${a[@]}"; do echo "\"$elem\""; done
"Hello"
"World"
"!"
michel@debG53SW:~$ for elem in "${a[*]}"; do echo "\"$elem\""; done
"Hello World !"
michel@debG53SW:~$
Le premier indice des tableaux bash est 0, aussi, j’ai failli te dire de te méfier des “trous” dans les tableaux car cela pouvait causer des problèmes dans la copie de tableaux.
Mais après quelques essais, je me rends compte que bash s’est encore amélioré.
michel@debG53SW:~$ a[1]="Hello";a[3]="World";a[11]="!" # J'ai un peu poussé la dispersion des éléments du tableau
michel@debG53SW:~$ echo ${!a[@]} # J'affiche la liste des indexs dont les éléments ne sont pas vides
1 3 11
michel@debG53SW:~$ copie=( "${a[@]}" ) # Je créé un autre tableau par copie du tableau
michel@debG53SW:~$ echo ${!copie[@]} # et je constate qu'il n'y a pas de "trous" dans la copie
0 1 2
michel@debG53SW:~$ echo ${!a[@]} # les "trous" sont encore présents dans le tableau original
1 3 11
michel@debG53SW:~$ a=( "${a[@]}" ) # Copie du tableau sur lui même pour "faire le ménage"
michel@debG53SW:~$ echo ${!a[@]}
0 1 2
michel@debG53SW:~$
Remarquable ! Je ne m’étais jamais intéressé au tableau en bash. Je ne soupçonnais pas que bash soit si puissant avec les tableau. Cela m’ouvre des perspectives intéressantes.