我需要循环一些值,
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等等。
你知道我该怎么做吗?
当前回答
如果你只是想用0填充数字以达到固定长度,只需添加最接近10的倍数 如。对于2位数字,加10^2,然后在显示输出之前删除第一个1。
此解决方案适用于填充/格式化任意长度的单个数字,或使用for循环填充/格式化整个数字序列。
# Padding 0s zeros:
# Pure bash without externals eg. awk, sed, seq, head, tail etc.
# works with echo, no need for printf
pad=100000 ;# 5 digit fixed
for i in {0..99999}; do ((j=pad+i))
echo ${j#?}
done
在Mac OSX 10.6.8, Bash ver 3.2.48上测试
其他回答
这也会起作用:
for i in {0..9}{0..9}{0..9}{0..9}
do
echo "$i"
done
我用比我需要的更多的数字(零)来填充输出,然后使用tail来只使用我正在寻找的数字数量。注意,你必须在tail中使用'6'来获得最后5位数字:)
for i in $(seq 1 10)
do
RESULT=$(echo 00000$i | tail -c 6)
echo $RESULT
done
使用printf非常简单
[jaypal:~/Temp] printf "%05d\n" 1
00001
[jaypal:~/Temp] printf "%05d\n" 2
00002
使用printf和“%05d”,例如:
printf "%05d" 1
如果你只是想用0填充数字以达到固定长度,只需添加最接近10的倍数 如。对于2位数字,加10^2,然后在显示输出之前删除第一个1。
此解决方案适用于填充/格式化任意长度的单个数字,或使用for循环填充/格式化整个数字序列。
# Padding 0s zeros:
# Pure bash without externals eg. awk, sed, seq, head, tail etc.
# works with echo, no need for printf
pad=100000 ;# 5 digit fixed
for i in {0..99999}; do ((j=pad+i))
echo ${j#?}
done
在Mac OSX 10.6.8, Bash ver 3.2.48上测试