我有一个基本的数字for循环,它在每次迭代中增加变量num 1…
for (( num=1; num<=5; num++ ))
do
echo $num
done
输出:
1
2
3
4
5
我试图让它产生输出(在$num之前添加前导零):
01
02
03
04
05
不做:
echo 0$num
我有一个基本的数字for循环,它在每次迭代中增加变量num 1…
for (( num=1; num<=5; num++ ))
do
echo $num
done
输出:
1
2
3
4
5
我试图让它产生输出(在$num之前添加前导零):
01
02
03
04
05
不做:
echo 0$num
当前回答
使用printf命令设置填充为0:
printf "%02d\n" $num
你的for循环是这样的:
for (( num=1; num<=5; num++ )); do printf "%02d\n" $num; done
01
02
03
04
05
其他回答
使用以下语法:
$ for i in {01..05}; do echo "$i"; done
01
02
03
04
05
免责声明:前导零只适用于>=bash-4。
如果你想使用printf,没有什么可以阻止你把它的结果放在一个变量中进一步使用:
$ foo=$(printf "%02d" 5)
$ echo "${foo}"
05
从bash 4.0开始,可以使用固定长度字符串的大括号展开。请参见下面的原始公告。
它将满足您的需要,并且不需要外壳以外的任何东西。
$ echo {01..05}
01 02 03 04 05
for num in {01..05}
do
echo $num
done
01
02
03
04
05
CHANGES,发布bash-4.0,第3节
这是自那时以来bash-4.0中添加的新特性的简要描述 bash-3.2的发布。 …… 大括号展开现在允许对展开的数值进行零填充,并将添加适当数量的零,以确保所有值包含相同数量的数字。
使用printf命令设置填充为0:
printf "%02d\n" $num
你的for循环是这样的:
for (( num=1; num<=5; num++ )); do printf "%02d\n" $num; done
01
02
03
04
05
为什么不打印'%02d' $num?关于这个内部bash命令,请参阅help printf。
Seq -w将检测最大输入宽度并标准化输出宽度。
for num in $(seq -w 01 05); do
...
done
在撰写本文时,这还不能在最新版本的OSX上运行,所以你可以安装macports并使用它的seq版本,或者你可以显式地设置格式:
seq -f '%02g' 1 3
01
02
03
但是考虑到这样一个简单问题的格式规范很糟糕,我更喜欢Henk和Adrian给出的解决方案,它只使用Bash。苹果不会搞砸的,因为没有通用的“unix”版本的Bash:
echo {01..05}
Or:
for number in {01..05}; do ...; done