LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: sjqu

在一个循环中如何依次输出a,b,c,d....x,y,z???

[复制链接]
发表于 2003-2-19 16:39:47 | 显示全部楼层
就是说这个\之后是8进制的,是吧。
虽然有\0前缀,但已经把它作为十进制看待了

这个话不是特别明白。后面echo -e "\0106"这个106是10进制的ascii还是8进制?
发表于 2003-2-19 17:00:23 | 显示全部楼层

修改了一下,差不多了

xie 0$ for (( i = 101 ; i <= 132 ; i++ )); do if (( "${i:2}" != "8" && "${i:2}" != "9" )); then echo -en "\0$i"; fi; done; echo
ABCDEFGHIJKLMNOPQRSTUVWXYZ
xie 0$ for (( i = 141 ; i <= 172 ; i++ )); do if (( "${i:2}" != "8" && "${i:2}" != "9" )); then echo -en "\0$i"; fi; done; echo
abcdefghijklmnopqrstuvwxyz
xie 0$
发表于 2003-2-19 17:17:45 | 显示全部楼层

看来是我说得不清楚

在man bash中有这样的描述
\0nnn  the  eight-bit  character  whose value is the octal value
       nnn (zero to three octal digits)
\nnn   the eight-bit character whose value is  the  octal  value
       nnn (one to three octal digits)

在用转义符\开头的一到三位数字都要作为八进制数字来看待,\0开头的也类似,但只不必非得跟一个数字而已。但八进制中只能用到[0-7]这些数字,如果有8、9、a、A之类的那肯定是错误字符了。所以bash在分析\0106这个字符串时,因为0、1、0、6都是“octal digits”,并且位数在“zero to three”之间,所以合法,可以输出。bash在分析\0108这个字符串时则不然,0、1、0都是合法的,但到8这里就不对了,所以bash只把前面已经确认的\010作为一个有效的“八进制数字转义字符”来使用,字符8则只是在这个“八进制数字转义字符”后面一个无关的普通字符了。所以bash打印\0108时,先打印转义字符\010,这是一个控制字符,表示退格,所以把先前输出的字符G(也就是\0107)抹掉了;紧接着,bash输出下面的字符,也就是8。同理,输出\0109也是类似,一个退格紧跟一个字符9。需要注意的是,这次的退格把刚输出的字符8也抹掉了。
所以会出现“…EF9HI…”这样古怪的输出序列。后面的\0118、\0128之类大家就可以自己分析一下了。
发表于 2003-2-19 17:22:54 | 显示全部楼层
i got it 3x
发表于 2003-2-19 22:21:29 | 显示全部楼层
多谢啦~~~
发表于 2003-2-20 08:24:09 | 显示全部楼层
  1. [root@mm2 ma]# for (( i = 101 ; i <= 132 ; i++ )); do if (( "${i:2}" != "8" &&
  2. "${i:2}" != "9" )); then echo -en "\0$i"; fi; done; echo
  3. 7       0       1       2       3       4       5       6       7
  4. 0
  5. 1
  6. 2
  7. 3
  8. 4
  9. 5
  10. 6
  11. 7
  12. 0
  13.   1
  14.    2
  15. [root@mm2 ma]# for (( i = 141 ; i <= 172 ; i++ )); do if (( "${i:2}" != "8" &&
  16. "${i:2}" != "9" )); then echo -en "\0$i"; fi; done; echo

  17. 1
  18. 2
  19.   3
  20.    4
  21.     5
  22.      6
  23. 701234567012
  24. [root@mm2 ma]# echo $SHELL
  25. /bin/bash
复制代码


为什么,我的结果和你们的不一样?请指教,谢谢。
发表于 2003-2-20 12:26:45 | 显示全部楼层
自己搞定

  1. [root@mm2 ma]# cat lx
  2. #! /bin/bash
  3. #script name: lx
  4. num=101
  5. while [ $num -le 132 ]
  6. do
  7. if [ "${num:2}" != "8" -a "${num:2}" != "9" ]
  8. then
  9. echo -en "\\$num"
  10. fi
  11. num=`expr $num + 1`
  12. done
  13. echo -e "\n"
  14. [root@mm2 ma]# ./lx
  15. ABCDEFGHIJKLMNOPQRSTUVWXYZ

  16. [root@mm2 ma]#
复制代码
发表于 2003-4-6 18:46:55 | 显示全部楼层
有更简单的,就是用 perl
javalee//home/javalee/lxperl>perl -e 'print a..z;print"\n";print A..Z;print "\n"'
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
javalee//home/javalee/lxperl>
这几天看了看Perl的书,发现Perl比shell还厉害!;)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表