免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3484 | 回复: 10
打印 上一主题 下一主题

如何根据读入的变量长度做循环? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-06-15 17:41 |只看该作者 |倒序浏览
本帖最后由 oniziga 于 2012-06-18 11:07 编辑

请教一个问题:

读入变量
read start

如果start是1,则从1开始循环,可以做1-9的循环,比如打印D1-D9;
如果start是01,则从01开始循环,可以做01-99的循环,比如打印D01-99;

如果start是001,则从001开始循环,可以做001-999的循环,比如打印D001-D999.

依次类推。。。

有没有比较优雅的实现方法?

+++++++++++++++++++++++++++++++++++++++++++++++++++++

非常感谢下面回帖的各位,方法够优雅,可惜我都看不懂,哈哈

不好意思,我没有把需求说的明白,重新说一下:

实现一个函数,有两个变量,第一个变量$1是一个字符串,第二个变量$2是整数;

要求该函数,对字符串$1实现循环$2次数。比如第一个参数是“D001”,第二个参数是5,则打印出D001-D005;
如果第一个参数是D005,第二个参数是10,则打印D005-D014.

反正是从$1的最后一位开始递增。
难点应该是循环次数不一定,如果D001-D005种情况好说,但是D005-D014设计到进位了,如果要进多个位可能是不是更麻烦?比如D0001-D0555.

论坛徽章:
0
2 [报告]
发表于 2012-06-15 17:47 |只看该作者
  1. 写个end变量:
  2. end=$(echo "$start"|sed s/./9/g)
复制代码

论坛徽章:
0
3 [报告]
发表于 2012-06-15 17:48 |只看该作者
awk '{for(i=1;i<10^length("'"$start"'");i++)print i}'

算得上优雅不

论坛徽章:
0
4 [报告]
发表于 2012-06-15 18:25 |只看该作者
  1. eval echo {$start..${start//?/9}}
复制代码

论坛徽章:
0
5 [报告]
发表于 2012-06-15 21:21 |只看该作者
回复 4# hbmhalley


    够优雅!

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
6 [报告]
发表于 2012-06-16 00:05 |只看该作者
seq -f %0$(expr length $start).f ${start//*/9}

论坛徽章:
0
7 [报告]
发表于 2012-06-18 11:08 |只看该作者
顶顶))

论坛徽章:
0
8 [报告]
发表于 2012-06-18 11:39 |只看该作者
回复 4# hbmhalley


    牛叉哄哄呀

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
9 [报告]
发表于 2012-06-18 14:46 |只看该作者
回复 1# oniziga


    用seq应该可以,它既可以设置格式,也可以设定递增值,比如
  1. seq -f "D%03.f" 5 2 $((10+5))
  2. D005
  3. D007
  4. D009
  5. D011
  6. D013
  7. D015

复制代码

论坛徽章:
0
10 [报告]
发表于 2012-06-26 09:51 |只看该作者
yinyuemi 发表于 2012-06-18 14:46
回复 1# oniziga


谢谢,是我想要的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP