Ich lerne Shellskripting aus einem veralteten Lehrbuch und es scheint mir wirklich nützlich zu sein, ein Programm zu haben, das nur eine Folge von Zahlen zurückgibt, die durch Leerzeichen wie begrenzt sind
$ range 10 20
10 11 12 13 14 15 16 17 18 19 20
Dann, wenn Sie ein Shell-Skript machen, können Sie haben
for i in `range 10 20`; do some stuff with numbers in that range;done
gibt es so etwas oder muss ich es selbst schreiben?
range
mitseq
in Ihrem Beispiel. Das Standardtrennzeichen ist newline, um Leerzeichen zu haben:seq -s " " 10 20
for
Schleife keine Rolle - oder auch nur einen allgemeinen Befehl, der Argumente aufteilt - es sei denn, Sie haben das IFS anders festgelegt.seq
da diese von POSIX nicht spezifiziert werden.Antworten:
seq
ist ein Teil von coreutils.Ausgabe:
Wenn Sie nur 2 Argumente für
seq
angeben, ist das Inkrement 1:quelle
sed
hat auch nette optionen wie-s
das separator zu setzen oder-w
die breite zu qualifizieren. Und Sie können ein Inkrement angeben:seq -w -s ", " 0 5 20
Ergebnisse in 00, 05, 10, 15, 20 .seq
?seq 10 20
könnte auch ein einfaches Beispiel sein, das es wert ist, hinzugefügt zu werden;)Würde Bash ausreichen?
Sie können eine Menge Dinge mit tun Klammer Expansion . Bash 4 unterstützt auch gepolsterte Bereiche, z
{01..20}
.Beachten Sie, dass Bash nicht als portabel und nicht als Standard-Unix-Dienstprogramm gilt. Obwohl Sie davon ausgehen können, dass es auf den meisten modernen Linux-Systemen installiert ist, sollten Sie dies nicht in einem Skript verwenden, das auf allen Arten von Unix-ähnlichen Computern ausgeführt werden soll.
quelle
seq
. Die Nutzung ist wie in Ihrem Beispiel:seq -s " " 10 20
. Der-s
Parameter ist erforderlich, da die Werte standardmäßig durch getrennt sind\n
.seq
es sich um ein GNU-Dienstprogramm handelt und daher kein "Standard-Unix-Programm" istfor i in {001..010}; ... ; done
und die Zahl auf 3 Stellen aufnullen.Wenn Sie etwas strikt portierbares wollen (dh das nicht auf bestimmten Bash-Erweiterungen oder Befehlen basiert, die nicht von POSIX angegeben wurden)
quelle
/dev/null
oder< /dev/null
darauf?If the awk program contains no actions and no patterns, but is otherwise a valid awk program, standard input and any file operands shall not be read and awk shall exit with a return status of zero.
Vor 10.7 gab es
seq
unter Mac OS X aberjot
aufgrund des BSD-Erbes keine .Beispiel:
quelle
Verwenden Sie eine
for
Schleifequelle
Sie können es verwenden
seq
oder wenn Sie es nicht haben, können Sie es selbst schreiben:Verwendung:
Oder:
quelle
Der Vollständigkeit halber hier etwas, das mit einigen älteren Unix-Varianten (sofern sie Perl installiert haben) funktioniert. Nicht wirklich elegant.
quelle