Ausgabe der Ergebnisse einer verschachtelten for-Schleife in eine Datei in bash

Ausgabe der Ergebnisse einer verschachtelten for-Schleife in eine Datei in bash

Ich habe versucht, aus meiner Schleife in Bash eine Datei zu erstellen. Mit dem folgenden Code konnte ich die Datei erfolgreich generieren

for ((i = 0; i <= 5; i++)); do
  for ((j = i; j <= 5; j++)); do
    echo -e "$i $j" >> numbers.txt
  done 
done

Ich möchte jedoch, dass meine Ergebnisse folgendermaßen aussehen

 01

 02

 03

usw.

Aber das Ergebnis, das ich erhalte, ist ähnlich wie dieses

0 0 1 0 2 0 3 0 4 0 5 1 1 1 2 1 3 1 4 1 5 2 2 2 3 2 4 2 5 3 3 3 4 3 5

Wie kann ich das lösen?

Antwort1

bash hatC-artige for-Schleifen, aber stilistisch sind sie etwas seltsam, wenn man sie nicht unbedingt braucht. Und wenn man sie wirklich unbedingt braucht,habenZu,Dukönntedie falsche Sprache verwenden. (Für diesen Anwendungsfall reicht natürlich auch eine Shell aus.)

Eine (meiner Meinung nach) viel Shell-ähnlichere Möglichkeit, dies zu tun, ist:

for i in {0..5}; do for j in $(seq "$i" 5); do echo "$i$j"; done; done

Hier ist ein anderer Ansatz:

(set {0..5}; for i; do for j; do [ "$i" -le "$j" ] && echo "$i$j"; done; done)

Ich schreibe diese als Einzeiler, die für eine interaktive Shell geeignet sind, aber sie funktionieren genauso gut in strukturierter Form (was in einem Skript normalerweise vorzuziehen wäre):

set {0..5}
for i; do
  for j; do
    [ "$i" -le "$j" ] &&
      printf '%d%d\n' "$i" "$j"
  done
done

Antwort2

for ((i = 0; i <= 5; i++)); do
  for ((j = i; j <= 5; j++)); do
    echo -e "${i}${j}\n" >> numbers.txt
  done 
done

Sollte funktionieren. Ich habe das Leerzeichen entfernt, ich bevorzuge die Verwendung von {}'s um meine Variablen und \nfüge neue Zeilen ein.

verwandte Informationen