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 \n
füge neue Zeilen ein.