| 您的位置:首页 > 文档 > Shell > |
文章分类热门文章 |
获得一个变量的长度创建:2005-10-26 00:49:46 作者:Unlinux 来自: http://www.Unlinux.com 就是说,现在有变量$name,我想取得其值的长度,应该怎么做? 这样:echo $name | wc -c | read asd 这样name变量的长度就读到asd变量了,但是会比实际的长度多1 还有一个更好的方法:echo $name | awk '{printf("%d",length($1))} | read asd #!/bin/sh echo -n "Input ID (Ex. : ca0001): " read STR name=$STR echo "" echo $name | awk '{printf("%d",length($1))}'| read length echo $length while [ "$length" != "6" ] do echo "Please input ID in correct format!" read STR name=$STR done echo "succeed" echo $length的结果是什么? 换一种写法: length=`echo $name | awk '{printf("%d",length($1))}'` 其中`号为“1”键左边的键 # name='Zhang lao san' # echo $name | awk '{printf("%d",length($0))}' | read asd # echo $asd 13 # # #感觉怎么样? rain0216: 按照你的脚本的逻辑,如果首次输入的长度不是6是会死循环的呀。难道没有吗? 应该将 echo "" echo $name | awk '{printf("%d",length($1))}'| read length echo $length 放到while循环体里边才是。 不会啊,循环里面是交互的啊,只要符合条件就可以退出循环的 read name asd=`echo $name|awk '{printf("%d",length($1))}'` echo 你刚输的变量长度为$asd 刚刚加入,请各位多多指教! 前面的朋友说得没错,会死循环,变量$length应该在循环里面重新赋值! 各位,可以试一下下面的代码: read name len=`awk -v tname=$name 'BEGIN { print length(tname)}'` print "Length is :" len asd=`expr length $name` echo $asd 怎么会不是死循环?按你脚本的逻辑,第一次进入循环的是非法串长,在循环体内又没有一条语句来修改这个非法串长就成了死循环,所以还是要将read name echo $name |awk '{printf("%d",length($1))}' |read ad 放在循环内。 哦,是的,当时代码没有没有写完整,而我自己用的是完整的,所以就想当然以为这段也没错了。多谢各位提醒 ksh中: echo ${#$name} try this way : #env $string |wc 转载自:http://www.unlinux.com/doc/shell/20051026/274.html 【评论】 【加入收藏夹】 【大 中 小】 【打印】 【关闭】 ※ 相关链接
|