Lorsque j'utilise les éléments suivants, j'obtiens le résultat escompté:
$ echo {8..10}
8 9 10
Comment puis-je utiliser cette extension de manière très simple pour obtenir la sortie suivante?
$ echo {8..10}
08 09 10
J'ai maintenant que cela peut être obtenu en utilisant seq
(n'a pas essayé), mais ce n'est pas ce que je cherche.
Des informations utiles peuvent être que je suis limité à cette version bash. (Si vous avez une zsh
solution, mais pas de bash
solution, merci de la partager également)
$ bash -version
GNU bash, version 3.2.51(1)-release (x86_64-suse-linux-gnu)
bash
arithmetic
brace-expansion
Bernhard
la source
la source
Réponses:
Préfixez le premier nombre avec un
0
pour forcer chaque terme à avoir la même largeur.De la section de la page de manuel bash sur Expansion de Brace:
Notez également que vous pouvez utiliser
seq
l'-w
option d'égaliser la largeur en ajoutant des zéros au début:Si vous voulez plus de contrôle, vous pouvez même spécifier un format de style printf:
la source
echo {08..10}
solution, elle n’a été introduite que pour la version 4 et les versions ultérieures de bash.perl
), un zéro à gauche indique un nombre octal. Je suppose que ce n'est pas souvent que vous voulez une séquence de nombres octaux ...seq
avec le-w
commutateur comme ceci:seq -w 003
produit les nombres 001, 002 et 003.foo_00001.someextension
où presque tous les contextes de tri fournissent un ordre sain.si vous utilisez printf
cela forcera à avoir 2 caractères et ajoutera un 0 devant. Si vous avez besoin de 3 chiffres, vous pouvez changer en "% .3d".
la source
printf
solution, mais cela ne facilite pas vraiment les choses. J'espère qu'il y a une astuce cachée qui fait le travail :)Utilisez une plage commençant par un chiffre constant et supprimez-la par une bande:
ou sans utiliser une commande externe:
Pour une utilisation dans une boucle for:
cependant, dans ce cas, une boucle while serait plus claire et fonctionnera dans n’importe quel shell POSIX:
la source
for
quand même besoin de la boucle.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:C'est un peu plus fastidieux, mais cela fonctionne sur la version OP de bash (et des versions ultérieures, je suppose).
la source
Pour référence, je pense que la largeur fixe automatique ne se produit qu'avec la dernière version de bash:
la source
les zéros, ini et fin sont des vars, il est donc facile d’écrire uniquement les zéros que vous dites en 'zéros' pour ini pour finir sans problèmes;)
la source