Wenn ich Folgendes verwende, erhalte ich wie erwartet ein Ergebnis:
$ echo {8..10}
8 9 10
Wie kann ich diese Klammererweiterung auf einfache Weise verwenden, um die folgende Ausgabe zu erhalten?
$ echo {8..10}
08 09 10
Ich weiß jetzt, dass dies mit seq
(nicht ausprobiert) erreicht werden kann, aber das ist nicht das, wonach ich suche.
Nützliche Informationen können sein, dass ich auf diese Bash-Version beschränkt bin. (Wenn Sie eine zsh
Lösung, aber keine bash
Lösung haben, teilen Sie diese bitte mit.)
$ bash -version
GNU bash, version 3.2.51(1)-release (x86_64-suse-linux-gnu)
bash
arithmetic
brace-expansion
Bernhard
quelle
quelle
Antworten:
Stellen Sie der ersten Zahl ein voran, um
0
zu erzwingen, dass jeder Term dieselbe Breite hat.Im Abschnitt der Bash-Manpage zur Klammererweiterung:
Beachten Sie auch, dass Sie
seq
die-w
Option zum Ausgleich der Breite verwenden können, indem Sie mit führenden Nullen auffüllen:Wenn Sie mehr Kontrolle wünschen, können Sie sogar ein printf-Format angeben:
quelle
echo {08..10}
Lösung informiert haben, wird sie nur für die Bash-Version 4 und höher eingeführt.perl
) gibt eine führende Null eine Oktalzahl an. Ich nehme an, Sie möchten nicht oft eine Folge von Oktalzahlen ...seq
mit dem-w
Schalter wieseq -w 003
foo_00001.someextension
bei der fast alle Sortierkontexte eine sinnvolle Reihenfolge liefern.wenn Sie printf verwenden
Dies erzwingt 2 Zeichen und fügt eine führende 0 hinzu. Wenn Sie 3 Stellen benötigen, können Sie zu "% .3d" wechseln.
quelle
printf
Lösung, aber sie macht es nicht wirklich einfacher. Ich hoffe, dass es einen versteckten Trick gibt, der den Job macht :)Verwenden Sie einen Bereich, der mit einer konstanten Ziffer beginnt, und entfernen Sie diese Ziffer:
oder ohne Verwendung eines externen Befehls:
Zur Verwendung in einer for-Schleife:
In diesem Fall wäre eine while-Schleife klarer und funktioniert in jeder POSIX-Shell:
quelle
for
Schleife sowieso brauchte .Ich habe die gleiche Bash-Version des ursprünglichen Posters (
GNU bash, version 3.2.51(1)-release
) und{08..12}
funktioniert bei mir nicht, aber Folgendes funktioniert:Es ist etwas langweiliger, aber es funktioniert auf der OP-Version von Bash (und späteren Versionen, würde ich annehmen).
quelle
Als Referenz denke ich, dass die automatische feste Breite nur mit der neuesten Version von Bash auftritt:
quelle
Nullen, Ini und Fin sind Vars, also ist es einfach, nur Nullen zu schreiben, die man in 'Nullen' sagt, damit Ini ohne Probleme zu Finnen wird;)
quelle