我需要循环一些值,
for i in $(seq $first $last)
do
does something here
done
对于$first和$last,我需要它的固定长度为5。所以如果输入是1,我需要在前面加上0,这样它就变成了00001。例如,它循环到99999,但长度必须是5。
例如:00002,00042,00212,12312等等。
你知道我该怎么做吗?
我需要循环一些值,
for i in $(seq $first $last)
do
does something here
done
对于$first和$last,我需要它的固定长度为5。所以如果输入是1,我需要在前面加上0,这样它就变成了00001。例如,它循环到99999,但长度必须是5。
例如:00002,00042,00212,12312等等。
你知道我该怎么做吗?
当前回答
这也会起作用:
for i in {0..9}{0..9}{0..9}{0..9}
do
echo "$i"
done
其他回答
使用printf和“%05d”,例如:
printf "%05d" 1
像这样使用awk:
awk -v start=1 -v end=10 'BEGIN{for (i=start; i<=end; i++) printf("%05d\n", i)}'
输出:
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
更新:
作为纯bash的替代方案,你可以这样做来获得相同的输出:
for i in {1..10}
do
printf "%05d\n" $i
done
通过这种方式,您可以避免使用外部程序seq,该程序在所有*nix版本中都不可用。
其他方式:
zeroos="000"
echo
for num in {99..105};do
echo ${zeroos:${#num}:${#zeroos}}${num}
done
转换任何数字的简单函数是:
function leading_zero(){
local num=$1
local zeroos=00000
echo ${zeroos:${#num}:${#zeroos}}${num}
}
使用printf非常简单
[jaypal:~/Temp] printf "%05d\n" 1
00001
[jaypal:~/Temp] printf "%05d\n" 2
00002
你可以做得更简单
for i in {00001..99999}; do
echo $i
done