我想将数组打印为
001 002 003 .. 010 021 022 .. 030 041 042 .. 050
我写了以下脚本来做到这一点。这样做效果很好,但它打印得像
001 021 041 002 022 042 ....
#!/bin/sh
for i in {1..10}; do
while [ $i -le 50 ]; do
if [[ $i -le 9 ]];then n=00$i;else n=0$i;fi
echo $n
i=$(( i + 20 ))
done
done
我正在寻找一种简单的方法,以便打印出像
一样001 002 003 .. 010 021 022 .. 030 041 042 .. 050
答案 0 :(得分:3)
我假设您使用的是Linux(因为seq
通常没有像FreeBSD那样安装)。
您可以seq
使用-f
选项。
首先seq
打印001 .. 010
秒seq
打印021 .. 030
和最后seq
次打印041 .. 050
for i in {0..2}
do seq -f '%03g' $((i*20+1)) $((i*20+10))
done
答案 1 :(得分:1)
shell中的for
- 循环需要在静态集上运行,但是在循环中更改$i
。
相反,请使用while
- 循环:
i=1
while [ $i -le 50 ]; do
printf "%03d " $i
if [ $( expr $i % 10 ) -eq 0 ]; then
i=$(( i + 11 ))
else
i=$(( i + 1 ))
fi
done
echo
或者bash
或ksh
:
i=1
while (( i <= 50 )); do
printf "%03d " $i
if (( (i % 10) == 0 )); then
(( i += 11 ))
else
(( ++i ))
fi
done
echo
答案 2 :(得分:1)
使用numrange:
numrange /001..010,021..030,041..050/
输出(空格分隔):
001 002 003 004 005 006 007 008 009 010 021 022 023 024 025 026 027 028 029 030 041 042 043 044 045 046 047 048 049 050
对于换行分隔符,添加-N
选项(未显示30行输出):
numrange -N /001..010,021..030,041..050/
答案 3 :(得分:1)
<强>的bash 强>:
echo {001..010} {021..030} {041..050}
输出:
001 002 003 004 005 006 007 008 009 010 021 022 023 024 025 026 027 028 029 030 041 042 043 044 045 046 047 048 049 050