将嵌套 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

ETC。

但我得到的结果与此类似

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 循环,但从风格上来说,当您不需要时使用它们有点奇怪。如果你真的做到了绝对到,可能使用错误的语言。 (当然,对于这个用例,shell 就可以了。)

一种更像 shell 的方法(在我看来)是:

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)

我将它们编写为适合交互式 shell 的单行代码,但它们在结构化形式中同样可以很好地工作(这通常在脚本中更可取):

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

应该做到这一点。我删除了空格,我更喜欢{}在变量周围使用 ' 并\n放入新行。

相关内容