Boucle for mettre un 0 devant $i : bash

Bonjour

J’ai un petit pbm dans un script bash.

Si je fais $ for (( i=1 ; i<14 ; i++ )) ; do echo $i; done
j’obtiens

$ for (( i=1 ; i<14 ; i++ )) ; do echo $i; done
1
2
3
4
5
6
7
8
9
10
11
12
13

Normal me direz vous mais comment faire pour avoir ceci

01 02 03 04 05 06 07 08 09 10 11 12 13

J’ai bien essayé $ for (( i=01 ; i<14 ; i++ )) ; do echo $i; done mais ca marche pas.

Merci de me donner un coup de main.

Salut,

On fait comme en C:

$ for (( i=1 ; i<14 ; i++ )) ; do printf '%02d\n' $i; done
01
02
03
04
05
06
07
08
09
10
11
12
13

:smiley: effectivement merci beaucoup

De rien, a noter que :

for i in $(seq -w 1 13); do echo $i; done

est plus portable :slightly_smiling:

[quote=“Knucky”]De rien, a noter que :

for i in $(seq -w 1 13); do echo $i; done

est plus portable :slightly_smiling:[/quote]
Et

permet de garder une taille constante en mémoire quelque soit N.

[quote=“BBT1”]

permet de garder une taille constante en mémoire quelque soit N.[/quote]
Ton code me rappelle ce que je faisais avant pour les variables dans les pipes

la différence entre
seq -w 3 | while read I; do aa=“zzzz”; echo $I; done;echo $aa
et
seq -w 3 | { while read I; do aa=“zzzz”; echo $I; done;echo $aa;}

Je ne suis par contre par certain que ca soit portable.

Vu que dash ne se plaint pas et donne le même résultat que bash,
je dirai que c’est POSIX et donc portable.

Mouais en fait c’est pas complètement gagné…

$ bash -c 'seq -w 3 | while read I; do aa="zzzz"; echo $I; done;echo $aa' 1 2 3

$dash -c 'seq -w 3 | while read I; do aa="zzzz"; echo $I; done;echo $aa' 1 2 3

%zsh -c 'seq -w 3 | while read I; do aa="zzzz"; echo $I; done;echo $aa' 1 2 3 zzzz

[quote=“limax”]la différence entre
seq -w 3 | while read I; do aa=“zzzz”; echo $I; done;echo $aa
et
seq -w 3 | { while read I; do aa=“zzzz”; echo $I; done;echo $aa;}[/quote]

L’idée c’est que le | est plus prioritaire que ;, &, && ou ||.
De plus chaque commande du pipeline est exécutée dans un nouveau sous-shell,
donc dans la première commande, on a deux sous-shells:
[ul][li]seq -w 3[/li]
[li]while read I; do aa="zzzz"; echo $I[/li][/ul]
Le aa=“zzzz” ne modifie que le second sous-shell et n’agit pas sur le reste de la commande.

Au contraire, les mots clés { et } regroupent les commandes qu’ils contiennent dans le même shell,
en l’occurence le deuxième sous-shell :