入れ子になった 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)

私はインタラクティブシェルに適した1行で書いていますが、構造化された形式でも同じようにうまく機能します(通常はスクリプトで好まれます)。

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

おすすめ記事