私は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
新しい行に配置することを好みます。