ネストされた for ループの結果を bash のファイルに出力する

ネストされた for ループの結果を bash のファイルに出力する

私はbashのループからファイルを作成しようとしていましたが、次のコードでファイルを生成することに成功しました。

for ((i = 0; i <= 5; i++)); do
  for ((j = i; j <= 5; j++)); do
    echo -e "$i $j" >> numbers.txt
  done 
done

しかし、私は結果を次のように発表したいと思っています

 01

 02

 03

しかし、私が得た結果はこれに似ています

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

これをどうすれば解決できますか?

答え1

bash もっているCスタイルのforループですが、必要がないときに使うにはスタイル的に少し奇妙です。そして、本当に絶対に持っているに、あなたかもしれない間違った言語を使用している(もちろん、このユースケースではシェルでも問題ありません。)

これを実行するための、よりシェルに似た方法は(私の意見では)次のとおりです。

for i in {0..5}; do for j in $(seq "$i" 5); do echo "$i$j"; done; done

別のアプローチは次のとおりです。

(set {0..5}; for i; do for j; do [ "$i" -le "$j" ] && echo "$i$j"; done; done)

私はこれらを対話型シェルに適したワンライナーとして書いていますが、構造化された形式でも同様に機能します (通常、スクリプトでは構造化された形式が好まれます)。

set {0..5}
for i; do
  for j; do
    [ "$i" -le "$j" ] &&
      printf '%d%d\n' "$i" "$j"
  done
done

答え2

for ((i = 0; i <= 5; i++)); do
  for ((j = i; j <= 5; j++)); do
    echo -e "${i}${j}\n" >> numbers.txt
  done 
done

うまくいくはずです。スペースを削除し、{}変数を 's で囲んで\n新しい行に配置することを好みます。

関連情報