Retourner au contenu associé (dépêche : Bash 5 : une introduction)
Posté par SChauveau le 05 août 2022 à 20:27. En réponse à la dépêche Bash 5 : une introduction. Évalué à 10. Dernière modification le 05 août 2022 à 20:30.
Amusant. Bien que pratiquant le Bash fréquemment, je dois avouer avoir dû consulter le man pour le comprendre.
SPOILER ALERT:
a est donc un tableau contenant 4 éléments. a[0] --> 'a[a[n]=a[n-1]+a[n-2],n++/94]' a[1] --> 2 a[2] --> 0 a[3] --> 1
a
Pour un tableau X, la syntaxe ${X[@]:i} permet d'obtenir les éléments à partir de l'indice i soit X[i] X[i+1] ...
X
${X[@]:i}
i
X[i] X[i+1] ...
Ici, i correspond à l'expression n=4,a qui est alors évaluée en mode ARITHMETIQUE.
n=4,a
Comme en C, l'opérateur , permet d'évaluer plusieurs expressions et retourne la valeur de la dernière. Ici, on a donc n=4 puis le résultat final a.
,
n=4
Or, en Bash, une référence simple à un tableau retourne son premier élément.
L'indice 'i' est donc équivalent à
i --> n=4, a[a[n]=a[n-1]+a[n-2],n++/94]
n=4, a[a[n]=a[n-1]+a[n-2],n++/94]
Comme n++/94 est équivalent à n=n+1, n/94 on a donc
n++/94
n=n+1, n/94
a[0] --> a[a[n]=a[n-1]+a[n-2],n++/94]
a[0]
a[a[n]=a[n-1]+a[n-2],n++/94]
a[0] --> a[a[n]=a[n-1]+a[n-2],n=n+1,n/94]
a[a[n]=a[n-1]+a[n-2],n=n+1,n/94]
a[0] --> a[n]=a[n-1]+a[n-2], n=n+1, a[n/94]
a[n]=a[n-1]+a[n-2], n=n+1, a[n/94]
Et l'indice i est donc évalué comme
i --> n=4, a[n]=a[n-1]+a[n-2], n=n+1, a[n/94] i --> n=4, a[4]=a[3]+a[2], n=5, a[5/94] i --> n=4, a[4]=a[3]+a[2], n=5, a[0]
n=4, a[n]=a[n-1]+a[n-2], n=n+1, a[n/94]
n=4, a[4]=a[3]+a[2], n=5, a[5/94]
n=4, a[4]=a[3]+a[2], n=5, a[0]
On remplace alors a[0] par sa valeur pour obtenir
i --> n=4, a[4]=a[3]+a[2], n=5, a[n]=a[n-1]+a[n-2], n=n+1, a[n/94] i --> n=4, a[4]=a[3]+a[2], n=5, a[5]=a[4]+a[3], n=6, a[6/94] i --> n=4, a[4]=a[3]+a[2], n=5, a[5]=a[4]+a[3], n=6, a[0]
n=4, a[4]=a[3]+a[2], n=5, a[n]=a[n-1]+a[n-2], n=n+1, a[n/94]
n=4, a[4]=a[3]+a[2], n=5, a[5]=a[4]+a[3], n=6, a[6/94]
n=4, a[4]=a[3]+a[2], n=5, a[5]=a[4]+a[3], n=6, a[0]
Le même processus récursif se poursuit jusqu'à ce que n soit égal à 94 et donc que a[n/94] devienne a[1].
n
94
a[n/94]
a[1]
L'indice i est donc évalué comme
i --> n=4, a[4]=a[3]+a[2], n=5, a[5]=a[4]+a[3], n=6, ... , a[93]=a[92]+a[91], n=94, a[1]
n=4, a[4]=a[3]+a[2], n=5, a[5]=a[4]+a[3], n=6, ... , a[93]=a[92]+a[91], n=94, a[1]
La valeur finale de l'indice i est donc a[1] = 2 et le résultat final ${a[@]:i} = a[2] a[3] ... a[93], la suite de Fibonacci.
${a[@]:i} = a[2] a[3] ... a[93]
AltStyle によって変換されたページ (->オリジナル) / アドレス: モード: デフォルト 音声ブラウザ ルビ付き 配色反転 文字拡大 モバイル
[^] # Re: Suite de fibonacci en bash:
Posté par SChauveau . En réponse à la dépêche Bash 5 : une introduction. Évalué à 10. Dernière modification le 05 août 2022 à 20:30.
Amusant. Bien que pratiquant le Bash fréquemment, je dois avouer avoir dû consulter le man pour le comprendre.
SPOILER ALERT:
aest donc un tableau contenant 4 éléments.a[0] --> 'a[a[n]=a[n-1]+a[n-2],n++/94]'
a[1] --> 2
a[2] --> 0
a[3] --> 1
Pour un tableau
X, la syntaxe${X[@]:i}permet d'obtenir les éléments à partir de l'indiceisoitX[i] X[i+1] ...Ici,
icorrespond à l'expressionn=4,aqui est alors évaluée en mode ARITHMETIQUE.Comme en C, l'opérateur
,permet d'évaluer plusieurs expressions et retourne la valeur de la dernière. Ici, on a doncn=4puis le résultat finala.Or, en Bash, une référence simple à un tableau retourne son premier élément.
L'indice 'i' est donc équivalent à
i -->
n=4, a[a[n]=a[n-1]+a[n-2],n++/94]Comme
n++/94est équivalent àn=n+1, n/94on a donca[0]-->a[a[n]=a[n-1]+a[n-2],n++/94]a[0]-->a[a[n]=a[n-1]+a[n-2],n=n+1,n/94]a[0]-->a[n]=a[n-1]+a[n-2], n=n+1, a[n/94]Et l'indice
iest donc évalué commei -->
n=4, a[n]=a[n-1]+a[n-2], n=n+1, a[n/94]i -->
n=4, a[4]=a[3]+a[2], n=5, a[5/94]i -->
n=4, a[4]=a[3]+a[2], n=5, a[0]On remplace alors
a[0]par sa valeur pour obteniri -->
n=4, a[4]=a[3]+a[2], n=5, a[n]=a[n-1]+a[n-2], n=n+1, a[n/94]i -->
n=4, a[4]=a[3]+a[2], n=5, a[5]=a[4]+a[3], n=6, a[6/94]i -->
n=4, a[4]=a[3]+a[2], n=5, a[5]=a[4]+a[3], n=6, a[0]Le même processus récursif se poursuit jusqu'à ce que
nsoit égal à94et donc quea[n/94]deviennea[1].L'indice i est donc évalué comme
i -->
n=4, a[4]=a[3]+a[2], n=5, a[5]=a[4]+a[3], n=6, ... , a[93]=a[92]+a[91], n=94, a[1]La valeur finale de l'indice
iest donca[1]= 2 et le résultat final${a[@]:i} = a[2] a[3] ... a[93], la suite de Fibonacci.