このリダイレクトの使用の何が問題なのでしょうか?

このリダイレクトの使用の何が問題なのでしょうか?
#! /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 つのテキスト ファイルを作成し、それぞれに 1 つの文字が 8 回繰り返されるようにします。たとえば、A.txt には、列に文字 A が 8 回含まれている必要があります) なしでスクリプトを実行するとcat、確かに文字 A が 8 回表示され、次に B、C などが 8 回表示されます。ステートメントを挿入するとcat、機能しません。何が間違っているのでしょうか?

答え1

これらは 2 つの独立したコマンドです。

echo something
cat > somewhere

パイプを使用して 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です。例:yesheadcat

for i in {A..J}
do
   yes -- "$i" | head -8 >  ~/Desktop/"$i".txt
done

関連情報