Zeigen Sie 1 bis N am Terminal an

8

Ich suche nur eine einfache Sache, foo 8 wird dies zeigen:

1
2
3
4
5
6
7
8

PS: Ich suche nur nach Kommandozeile. Ich weiß, wie man das mit forder Bash erstellt

Mohammad Reza Rezwani
quelle
Wollen Sie damit sagen, dass Sie den seqBefehl (oder die Klammererweiterung {1..N}) kennen und nach etwas anderem suchen?
Muru
Nein, ich sage, ich weiß, wie ich sie durch Schreiben einer Bash-Datei zeigen kann. Aber ich weiß nicht, dass es den Befehl 'seq' gibt.
Mohammad Reza Rezwani

Antworten:

29

Um eine Zahlenfolge zu drucken, ist der Befehl 'seq' Ihr Freund

seq 8
jhilmer
quelle
2
Auch seq 5 10druckt 5 6 7 8 9 10und seq 8 16 2druckt 8 10 12 14 16(in Schritten von 2 pro Schritt)
6
@professorfish Für den zweiten ist es seq 8 2 16mit dem Inkrement zwischen erstem und letztem. seq 8 16 2druckt nichts. (Ich verstehe es auch immer falsch.)
Cascabel
seqist in vielen Unices weit verbreitet und Teil von coreutilsLinux, aber nicht POSIX und nicht portabel .
200_erfolg
16

{1..8} gibt Ihnen einen einfachen Argumentationsbereich in Bash.

Wenn Sie diese Zeile für Zeile benötigen, würde ich vorschlagen, sie so etwas wie printf zuzuführen:

$ printf '%d\n' {1..8}
1
2
3
4
5
6
7
8
Oli
quelle
hier, wenn 8 ein Parameter ist. was soll ich schreiben Ich meine: printf '% d \ n' {0..a}? Vielen Dank.
Mohammad Reza Rezwani
Ich versuche $ a und $ {a} und ...
Mohammad Reza Rezwani
1
@lion Sie müssen die Zeile neu bewerten, da Bash nicht erweitert wird. Es wird so etwas wien=5; printf '%d\n' $(eval echo {0..$n})
Oli
7

Sie können den echoBefehl auch mit Klammererweiterung verwenden

echo -e "\n"{1..8}

1 
2 
3 
4 
5 
6 
7 
8

Wenn Sie den ersten Zeilenumbruch nicht möchten, können Sie einen der folgenden Befehle verwenden.

echo -e "\n"{1..8}|tail -n8

echo -e "\n"{1..8}|grep .

echo -e "\n"{1..8}|grep [0-9]

echo -e "\n"{1..8}|sed 1d
registrierter Nutzer
quelle
Nur ein Kopf hoch, die Ausgabe beginnt mit einer neuen Zeile, die möglicherweise gekürzt werden muss (möglicherweise mit tail?), Wenn Sie die generierte Liste von Zahlen in einem Skript verwenden.
IQAndreas
1
@IQAndreas Ich habe eine Bearbeitung vorgenommen und alle denkbaren Befehle hinzugefügt, um die neue Zeile zu entfernen.
Registrierter Benutzer
6

Alternativ können Sie es auf einfachste Weise wie folgt erhalten:

$ echo {1..8} | tr ' ' '\n'
1
2
3
4
5
6
7
8

ODER:

$ for ((i=1 ; i<=8 ; i++)) do echo $i ; done;
1
2
3
4
5
6
7
8

8 kann durch Ihre positive Ganzzahl 'N' ersetzt werden!

EIN PLUS
quelle
4

Sie könnten diesen einfachen forBefehl verwenden,

$ for i in {1..8}; do echo $i; done
1
2
3
4
5
6
7
8

Durch awk,

$ awk 'BEGIN{for(i=1;i<=8;i++) {print i;}}'
1
2
3
4
5
6
7
8
Avinash Raj
quelle
Das OP spezifizierte: Ich weiß, wie man das durch für auf der Bash erstellt . Verwenden Sie while, um etwas Neues zu bringen.
Radu Rădeanu
@ RaduRădeanu hat den Befehl awk hinzugefügt.
Avinash Raj
1
Es wird immer noch verwendet for:)
Radu Rădeanu
OMG, ich denke er meint nicht das awk for command.
Avinash Raj
Und ich denke auch, dass er keinen so langen Befehl bedeutet ... WOE zu verwenden, bla bla bla ... print i ... bla blawenn Sie nur verwenden können printf '%d\n' {1..8}?
Radu Rădeanu