92 votes

Remplissage de zéros dans une chaîne de caractères

J'écris un script bash script pour obtenir des podcasts. Le problème est que certains numéros de podcasts sont à un chiffre alors que d'autres sont à deux/trois chiffres, je dois donc les remplir pour qu'ils soient tous à trois chiffres.

J'ai essayé ce qui suit :

n=1

n = printf %03d $n

wget http://aolradio.podcast.aol.com/sn/SN-$n.mp3

mais la variable 'n' ne reste pas remplie en permanence. Comment puis-je la rendre permanente ?

126voto

ChristopheD Points 38217

Utilisez les crochets pour assigner le résultat de la commande printf (``) :

n=1
wget http://aolradio.podcast.aol.com/sn/SN-`printf %03d $n`.mp3

EDIT : J'ai supprimé une ligne qui n'était pas vraiment nécessaire. Si vous voulez assigner la sortie de 'printf %...' à n, vous pourriez utiliser

n=`printf %03d $n`

et après cela, utilisez la substitution de la variable $n que vous avez utilisée précédemment.

49voto

nos Points 102226

Comme vous assignez la valeur de retour de la commande printf (qui est son code de sortie), vous voulez assigner la sortie de printf.

bash-3.2$ n=1
bash-3.2$ n=$(printf %03d $n)
bash-3.2$ echo $n
001

24voto

UnSandpiper Points 101

Attention toutefois si votre chaîne d'entrée comporte un zéro initial !
printf effectuera toujours le remplissage, mais convertira également votre chaîne de caractères en hexagone format octal.

# looks ok
$ echo `printf "%05d" 03`
00003

# but not for numbers over 8
$ echo `printf "%05d" 033`
00027

Une solution à ce problème semble être l'impression d'un flottant au lieu d'une décimale.
L'astuce consiste à omettre les décimales avec .0f .

# works with leading zero
$ echo `printf "%05.0f" 033`
00033

# as well as without
$ echo `printf "%05.0f" 33`
00033

20voto

cC Xx Points 151

Pour éviter le changement de contexte :

a="123"
b="00000${a}"
c="${b: -5}"

4voto

n=`printf '%03d' "2"`

Espacement des notes et backticks

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X