Linux Shell程式設計(13)——數字常量

尹成發表於2014-09-30
除非一個數字有特別的字首或符號,否則shell指令碼把它當成十進位制的數。一個字首為0的數字是八進位制數。一個字首為0x的數字是十六進位制數。一個數用內嵌的#來求值則看成BASE#NUMBER(有範圍和符號限制)


例子:數字常量的表示法


#!/bin/bash
# numbers.sh: 不同基數的數字表示法.


# 十進位制數: 它是預設的
let "dec = 32"
echo "decimal number = $dec"             # 32
# 這兒沒有什麼特別的.




# 八進位制數: 以'0'(零)為字首
let "oct = 032"
echo "octal number = $oct"               # 26
# 結果表示為十進位制.
# --------- ------ -- -------


# 十六進位制: 以'0x'或'0X'為字首
let "hex = 0x32"
echo "hexadecimal number = $hex"         # 50
# 以十進位制的形式表示.


# 其他的進位制的表示形式: BASE#NUMBER
# BASE值在2和64之間.
# NUMBER必須使用在BASE範圍內的符號,看下面的示例.




let "bin = 2#111100111001101"
echo "binary number = $bin"              # 31181


let "b32 = 32#77"
echo "base-32 number = $b32"             # 231


let "b64 = 64#@_"
echo "base-64 number = $b64"             # 4031
# 這個符號只能工作在ASCII碼值為2-64的範圍限制.
# 10個數字+26個小寫字母+26個大寫字母+ @ + _




echo


echo $((36#zz)) $((2#10101010)) $((16#AF16)) $((53#1aA))
                                         # 1295 170 44822 3375




#  重要提示:
#  --------------
#  使用一個超出給定進位制的數字將會引起一個錯誤資訊。
#+ gives an error message.


let "bad_oct = 081"
# ((部分的) 錯誤資訊輸出:
#  bad_oct = 081: value too great for base (error token is "081")
#              八進位制數字只能使用數字0-7.


exit 0


相關文章