Skip to content

Comment créer une séquence avec des zéros non significatifs en utilisant l’expansion des accolades

Solution:

Préfixez le premier numéro avec un 0 pour forcer chaque terme à avoir la même largeur.

$ echo {08..10}
08 09 10

Dans la section de la page de manuel de bash sur l’extension Brace :

Les entiers fournis peuvent être préfixés par 0 pour forcer chaque terme à avoir la même largeur. Lorsque x ou y commence par un zéro, le shell tente de forcer tous les termes générés à contenir le même nombre de chiffres, en ajoutant des zéros si nécessaire.

Notez également que vous pouvez utiliser seq avec le -w option pour égaliser la largeur en remplissant avec des zéros non significatifs :

$ seq -w 8 10
08
09
10

$ seq -s " " -w 8 10
08 09 10

Si vous voulez plus de contrôle, vous pouvez même spécifier un format de style printf :

$ seq -s " " -f %02g 8 10
08 09 10

si vous utilisez printf

printf "%.2d " {8..10} 

cela forcera à être 2 caractères et ajoutera un 0 en tête. Si vous avez besoin de 3 chiffres, vous pouvez changer en “%.3d “.

J’ai la même version bash de l’affiche originale (GNU bash, version 3.2.51(1)-release) et {08..12} ne fonctionne pas pour moi, mais ce qui suit fonctionne :

for i in 0{8..9} {10..12}; do echo $i; done
08
09
10
11
12

C’est un peu plus fastidieux, mais cela fonctionne sur la version OP de bash (et les versions ultérieures, je suppose).



Articles Similaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.