# Problème avec les tableaux dans BASH \[résolu\]

**URL:** <https://www.debian-fr.org/t/probleme-avec-les-tableaux-dans-bash-resolu/83370>\
**Category:** Programmation\
**Created:** [Novembre 23, 2020, 4:39 UTC](https://www.debian-fr.org/t/probleme-avec-les-tableaux-dans-bash-resolu/83370 "2020-11-23T16:39:30Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![guiguitarux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/guiguitarux/32/10039_2.png) [@guiguitarux](https://www.debian-fr.org/u/guiguitarux)\
**Post date:** [Novembre 23, 2020, 4:39 UTC](https://www.debian-fr.org/t/probleme-avec-les-tableaux-dans-bash-resolu/83370/1 "2020-11-23T16:39:30Z")

</div>

Bonjour,

Pour parler clairement, je cherche quelqu’un qui va accepter de débugger mon programme…

Petit résumé de ce qu’il est sensé faire :  
Y a un tableau créé avec des suites de 5 chiffres. Le script du programme prend en argument une valeur, c’est un chiffre; Ce chiffre doit être dans le tableau.  
Le but du programme c’est de déterminer l’emplacement exact du chiffre dans le tableau.  
Alors c’est balo parce que le programme fonctionne jusqu’à la troisième suite de 5 chiffres. à partir de la 4ième, il ne trouve plus.  
Admettons que vous enregistriez le script sous le nom de **cherche\_chiffre.sh**  
Par exemple si vous lancez le script ainsi, **$ ./cherche\_chiffre.sh 17** , le programme va répondre :

```
Numéro trouvé à l'index 1 . Entrée trouvée à la position : 2

```

Mais si vous saisissez **$ ./cherche\_chiffre.sh 24** alors là, y a aucun retour

```
 #!/bin/bash

 ### Création du tableau
 declare -a GrosTableau=("5 17 44 46 49 4" "11 14 28 41 43 8" "7 16 33 42 47 7" "17 24 26 40 43 9" "10 15 16 17 37 9" "5 18 26 38 41 10" "5 30 42 45 48 9" "9 10 14 16 29 1" "31 33 38 42 43 3" "9 13 22 28 35 5" "2 19 25 30 43 9" "7 8 12 22 33 5" "4 8 12 25 45 2" "15 21 33 35 48 1" "7 25 28 35 48 1" "9 20 23 24 28 4" "19 26 32 39 42 6" "7 11 18 21 42 3" "26 31 42 47 48 8" "6 17 19 30 49 2")
 
 ## affichage du tableau
 echo ${GrosTableau[@]}
 # cette boucle est sensée chercher une entrée définie par l'argument passée au lancement du script "$1"
 k=0
 while [["$k" < ${#GrosTableau[@]} ]];
 	do
 		declare -a tab=$(echo "tableau$k")
 		#echo $tab
 		tab=(${GrosTableau[$k]})
 		#echo "${tab[@]}"
 		for valeur in "${!tab[@]}";	# travail avec les indexs ($valeur prend les datas des indexs et non celles des entrees du tableau)
 				do
 					if [["$1" == "${tab[$valeur]}" ]]; then
 						posTab=$(($k+1))
 						posIndex=$(($valeur + 1))
 						echo "Numéro trouvé à l'index $posTab . Entrée trouvée à la position : $posIndex "
 						exit 0 # permet de sortir du programme pour éviter de rechercher les suivants
 					else
 						echo '' #"pas trouvé"
 					fi
 				done
 		((k++))
 	done

```

posTab=$(($k+1)) et posIndex=$(($valeur + 1)) , c’est juste pour rendre compréhensible la sortie du résultat, car la première entrée d’un tableau c’est 0…  
Voilà, par avance, merci à celui, celle ou ceux qui auront la patience de découvrir le hic !

---

<div class="post-metadata">

**Author:** ![PmGs](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/dfb087/32.png) [@PmGs](https://www.debian-fr.org/u/PmGs)\
**Post date:** [Novembre 23, 2020, 6:26 UTC](https://www.debian-fr.org/t/probleme-avec-les-tableaux-dans-bash-resolu/83370/2 "2020-11-23T18:26:34Z")

</div>

Parfois il est plus simple de repartir de 0, le script ci-dessous fonctionne. Pour info il transforme ton GrosTableau en un ensemble de petits à l’aide de la fonction read que tu sembles ne pas connaître.  
J’ai un peu modifié les choses, le script te donne tous les index trouvés et pas uniquement le premier, il est facile de le modifier si tu souhaites tj le 1er.

**Des exemples**  
./es\_tableau2.bash 17  
Numéro trouvé aux index 0 3 4 19 . Entrée trouvée aux positions : 1 0 3 1  
./es\_tableau2.bash 24  
Numéro trouvé aux index 3 15 . Entrée trouvée aux positions : 1 3  
./es\_tableau2.bash 333  
Non trouvé

**et le script**

```auto
#!/bin/bash
    cherche=$1
    gt=("5 17 44 46 49 4" "11 14 28 41 43 8" "7 16 33 42 47 7" "17 24 26 40 43 9" "10 15 16 17 37 9" "5 18 26 38 41 10" "5 30 42 45 48 9" "9 10 14 16 29 1" "31 33 38 42 43 3" "9 13 22 28 35 5" "2 19 25 30 43 9" "7 8 12 22 33 5" "4 8 12 25 45 2" "15 21 33 35 48 1" "7 25 28 35 48 1" "9 20 23 24 28 4" "19 26 32 39 42 6" "7 11 18 21 42 3" "26 31 42 47 48 8" "6 17 19 30 49 2")
    # echo ${gt[@]}
    its=();jts=()
    for i in "${!gt[@]}"; do 
    #	echo $i,${gt[$i]}
        pt=${gt[$i]}
    	read -r -a pt <<< ${gt[$i]} # <------ création d'un "petit tableau"
    #	echo ${pt[@]}
    	for j in "${!pt[@]}"; do
    # echo $i/$j,${pt[$j]}
    		[[$cherche == ${pt[$j]} ]] && { its=("${its[@]}" "$i");jts=(${jts[@]} $j); }
    	done	
    done
    [[0 -lt ${#its[@]} ]] && echo "Numéro trouvé aux index ${its[@]} . Entrée trouvée aux positions : ${jts[@]}" || echo Non trouvé

```

---

<div class="post-metadata">

**Author:** ![guiguitarux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/guiguitarux/32/10039_2.png) [@guiguitarux](https://www.debian-fr.org/u/guiguitarux)\
**Post date:** [Novembre 23, 2020, 6:49 UTC](https://www.debian-fr.org/t/probleme-avec-les-tableaux-dans-bash-resolu/83370/3 "2020-11-23T18:49:32Z")

</div>

🤒 merci… (!)

---

<div class="post-metadata">

**Author:** ![PmGs](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/dfb087/32.png) [@PmGs](https://www.debian-fr.org/u/PmGs)\
**Post date:** [Novembre 23, 2020, 9:27 UTC](https://www.debian-fr.org/t/probleme-avec-les-tableaux-dans-bash-resolu/83370/4 "2020-11-23T21:27:48Z")

</div>

De rien, pense à passer le post en résolu.

---

<div class="post-metadata">

**Author:** ![guiguitarux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/guiguitarux/32/10039_2.png) [@guiguitarux](https://www.debian-fr.org/u/guiguitarux)\
**Post date:** [Novembre 24, 2020, 1:07 UTC](https://www.debian-fr.org/t/probleme-avec-les-tableaux-dans-bash-resolu/83370/5 "2020-11-24T13:07:29Z")

</div>

Dans votre programme, je dois souligner que c’est super bien écrit, c’est d’autant surprenant que c’est exactement ce que je cherchais à faire, pouvoir décomposer mon code jusqu’à arriver au résultat.  
juste encore un truc, dans la ligne :

> read -r -a pt \<\<\< ${gt[$i]}

que signifie exactement **\<\<\<**

(même si j’en ai une vague idée, je connais \> , \>\> , \<, mais \<\<\< c’est la première fois que je le vois)

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Novembre 24, 2020, 2:32 UTC](https://www.debian-fr.org/t/probleme-avec-les-tableaux-dans-bash-resolu/83370/6 "2020-11-24T14:32:33Z")

</div>

Bonjour

> [@guiguitarux](#):
>
> …  
> juste encore un truc, dans la ligne :
> 
> > read -r -a pt \<\<\< ${gt[$i]}
> 
> que signifie exactement **\<\<\<**

Dans cette ligne de commandes,  
**`<<<`**  
redirige vers le flux d’entrée de la commande **`read`**  
la valeur de la variable contenue à l’index **`i`** du tableau **`gt`**

---

<div class="post-metadata">

**Author:** ![guiguitarux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/guiguitarux/32/10039_2.png) [@guiguitarux](https://www.debian-fr.org/u/guiguitarux)\
**Post date:** [Novembre 24, 2020, 3:17 UTC](https://www.debian-fr.org/t/probleme-avec-les-tableaux-dans-bash-resolu/83370/7 "2020-11-24T15:17:25Z")

</div>

d’accord, excellent. Merci pour tout
