#! /bin/bash
for i in {A,B,C,D,E,F,G,H,J} ; do
echo "$i
$i
$i
$i
$i
$i
$i
$i"
cat > ~/Desktop/$i.txt
done
Ich möchte 9 Textdateien erstellen, in denen jeweils ein Buchstabe 8-mal wiederholt wird. Beispiel: A.txt sollte den Buchstaben A 8-mal in einer Spalte enthalten. Wenn ich das Skript ohne ausführe cat
, zeigt es mir tatsächlich 8-mal den Buchstaben A, dann 8-mal den Buchstaben B, C usw. an. Beim Einfügen der cat
Anweisung funktioniert es nicht. Was mache ich falsch?
Antwort1
Es sind zwei unabhängige Befehle.
echo something
cat > somewhere
Sie können Pipe verwenden, um stdout an stdin zu übergeben:
echo something | cat > somewhere
Antwort2
Eine einfache Lösung hierfür wäre eine doppelte For-Schleife wie folgt:
for f in {A..J}; do for ((i=0;i<8;i++)); do printf '%s\n' "$f" >> "$f"; done; done
Antwort3
Sie können Bash-Sequenzen für die Schleife verwenden und printf geschickt einsetzen, um Zeichen zu wiederholen:
for i in {A..J};do printf "$i%.0s\n" {0..7} > ~/Desktop/$i.txt;done
Antwort4
AlsIpor Sircerecho
wies darauf hin, dass Ihnen lediglich ein Pipe-Zeichen zwischen Ihrem und fehlt cat
. Eine andere Lösung wäre, yes
denselben Text über mehrere Zeilen zu wiederholen und head
statt cat
die Anzahl der Zeilen zu begrenzen, z. B.
for i in {A..J}
do
yes -- "$i" | head -8 > ~/Desktop/"$i".txt
done