我一直在尝试在 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
放入新行。