#! /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
Я хочу создать 9 текстовых файлов, каждый из которых будет показывать одну букву, повторяющуюся 8 раз. Например, A.txt должен содержать букву A 8 раз в столбце. Если я запущу скрипт без cat
, он действительно покажет мне 8 раз букву A, затем 8 раз B, C и т. д. При вставке оператора cat
он не работает. Что я делаю не так?
решение1
Это две независимые команды.
echo something
cat > somewhere
Вы можете использовать pipe для передачи stdout в stdin:
echo something | cat > somewhere
решение2
Простым решением этой проблемы будет двойной цикл for, как показано ниже:
for f in {A..J}; do for ((i=0;i<8;i++)); do printf '%s\n' "$f" >> "$f"; done; done
решение3
Вы можете использовать последовательности bash для цикла и разумное использование printf для повторения символов:
for i in {A..J};do printf "$i%.0s\n" {0..7} > ~/Desktop/$i.txt;done
решение4
КакИпор Сирцеруказал, что вы просто пропускаете вертикальную черту между вашим echo
и cat
. Другим решением было бы использовать yes
для повторения одного и того же текста в нескольких строках и head
вместо того, cat
чтобы ограничить количество строк, например
for i in {A..J}
do
yes -- "$i" | head -8 > ~/Desktop/"$i".txt
done