------------ shell脚本默认都是将数字作为10进制数处理,除非这个数字某种特殊的标记法或前缀开头. 以0开头就是8进制.以0x开头就是16进制数.使用BASE#NUMBER这种形式可以表示其它进制 表示法
Example 8-4 数字常量的处理 ################################Start Script####################################### 1 #!/bin/bash 2 # numbers.sh: 数字常量的几种不同的表示法 3 4 # 10进制: 默认 5 let "dec = 32" 6 echo "decimal number = $dec" # 32 7 # 一切都很正常 8 9 10 # 8进制: 以'0'(零)开头 11 let "oct = 032" 12 echo "octal number = $oct" # 26 13 # 表达式的结果用10进制表示. 14 # 15 16 # 16进制表示:数字以'0x'或者'0X'开头 17 let "hex = 0x32" 18 echo "hexadecimal number = $hex" # 50 19 # 表达式的结果用10进制表示. 20 21 # 其它进制: BASE#NUMBER 22 # BASE between 2 and 64. 22 # 2到64进制都可以. 23 # NUMBER必须在BASE的范围内,具体见下边. 24 25 26 let "bin = 2#111100111001101" 27 echo "binary number = $bin" # 31181 28 29 let "b32 = 32#77" 30 echo "base-32 number = $b32" # 231 31 32 let "b64 = 64#@_" 33 echo "base-64 number = $b64" # 4031 34 # 这种64进制的表示法中的每位数字都必须在64进制表示法的限制字符内. 35 # 10 个数字+ 26 个小写字母+ 26 个大写字母+ @ + _ 36 37 38 echo 39 40 echo $((36#zz)) $((2#10101010)) $((16#AF16)) $((53#1aA)) 41 # 1295 170 44822 3375 42 43 44 # 重要的注意事项: 45 # --------------- 46 # 如果使用的每位数字超出了这个进制表示法规定字符的范围的话, 47 #+ 将给出一个错误消息. 48 49 let "bad_oct = 081" 50 # (部分的) 错误消息输出: 51 # bad_oct = 081: too great for base (error token is "081") 52 # Octal numbers use only digits in the range 0 - 7. 53 54 exit 0 # Thanks, Rich Bartell and Stephane Chazelas, for clarification. ################################End Script######################################### |