我有一个循环的基本数字,它在每次迭代时将变量num递增1 ...
for (( num=1; num<=5; num++ ))
do
echo $num
done
Run Code Online (Sandbox Code Playgroud)
哪个输出:
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)
我正在尝试让它产生输出(在$ num之前加上前导零):
01
02
03
04
05
Run Code Online (Sandbox Code Playgroud)
没有做:
echo 0$num
Run Code Online (Sandbox Code Playgroud)
Adr*_*rth 194
使用以下语法:
$ for i in {01..05}; do echo "$i"; done
01
02
03
04
05
Run Code Online (Sandbox Code Playgroud)
如果您想使用printf
,没有什么可以阻止您将其结果放入变量以供进一步使用:
$ foo=$(printf "%02d" 5)
$ echo "${foo}"
05
Run Code Online (Sandbox Code Playgroud)
免责声明:这只适用于>=bash-4
.
pio*_*ojo 45
seq -w
将检测宽度并将其标准化.
for num in $(seq -w 01 05); do
...
done
Run Code Online (Sandbox Code Playgroud)
显然这不适用于最新版本的iOS,因此您可以安装macport并使用其版本seq
,也可以显式设置格式:
seq -f '%02g' 1 3
01
02
03
Run Code Online (Sandbox Code Playgroud)
但鉴于这种简单问题的格式规范的丑陋,我更喜欢Henk和Adrian提供的解决方案,它只使用了Bash.苹果无法解决这个问题,因为没有通用的"unix"版本的Bash:
echo {01..05}
Run Code Online (Sandbox Code Playgroud)
要么:
for number in {01..05}; do ...; done
Run Code Online (Sandbox Code Playgroud)
anu*_*ava 31
使用printf
命令来0
填充:
printf "%02d\n" $num
Run Code Online (Sandbox Code Playgroud)
你的for循环将是这样的:
for (( num=1; num<=5; num++ )); do printf "%02d\n" $num; done
01
02
03
04
05
Run Code Online (Sandbox Code Playgroud)
Dav*_* W. 17
我对将它输出到屏幕不感兴趣(这就是printf主要用于的,对吧?)变量$ num将被用作另一个程序的参数,但是让我看看我能用它做些什么.
你仍然可以使用printf
:
for num in {1..5}
do
value=$(printf "%02d" $num)
... Use $value for your purposes
done
Run Code Online (Sandbox Code Playgroud)
Hen*_*eld 10
从bash 4.0开始,您可以使用具有固定长度字符串的Brace Expansion.请参阅下面的原始公告.
它将完成你所需要的,并且不需要shell外部的任何东西.
$ echo {01..05}
01 02 03 04 05
for num in {01..05}
do
echo $num
done
01
02
03
04
05
Run Code Online (Sandbox Code Playgroud)
这是自bash-3.2发布以来添加到bash-4.0的新功能的简洁描述.
...
ž.大括号扩展现在允许对填充扩展数值进行零填充,并添加适当数量的零以确保所有值包含相同的位数.