【发布时间】:2019-04-11 10:32:21
【问题描述】:
我正在尝试在 bash 中编写 for 循环,以便我可以将数字从 1 迭代到大于 10 的数字。在数字只有一位的情况下,应在其左侧添加零(如01)。
我找到的解决方案是这样的:
for i in 0{1..9} {10..43}; do
echo "stuff$i.txt"
done
这可行,但我想将上限作为变量,所以我尝试了这个:
max_test=43
for i in 0{1..9} {10..$max_test}; do
echo "stuff$i.txt"
done
运行时,脚本会打印出来
stuff01.txt
stuff02.txt
...
stuff09.txt
stuff{10..43}.txt
我找到了this answer,但在我的情况下,由于该一位数条件,我需要 2 个for 循环。做我想做的事的最佳方式是什么?
提前谢谢你
【问题讨论】:
-
这是一个重复的问题吗?我的问题是没有将变量作为迭代的上限,它是根据问题中解释的上下文这样做的。
-
我看到了您的编辑,
-w确保了 0 填充,因此您可以只使用一个$(seq -w 1 "$max_test")。 -
首先,
{01..43}将为您提供用零填充的两位数,至少在 bash 4 及更高版本中(例如,尝试:echo {0005..12})。其次,您现在知道大括号扩展是在其他任何事情之前评估的(如 bash 手册页的“EXPANSION”部分的第二段所述)。您可以使用eval(例如eval "echo {05..$n}")或算术(for ((i=5;i<=n;i++)); do printf '%02d ' $i; done)来解决这个问题。
标签: bash