#! /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
です。例:yes
head
cat
for i in {A..J}
do
yes -- "$i" | head -8 > ~/Desktop/"$i".txt
done