通常情況下: shell腳本會(huì)把數(shù)字以十進(jìn)制整數(shù)看待(base 10)妓布,除非數(shù)字加了特殊的前綴或標(biāo)記
帶前綴0的數(shù)字是八進(jìn)制數(shù)(base 8); 帶前綴0x的數(shù)字是十六進(jìn)制數(shù)(base 16)
內(nèi)嵌 # 的數(shù)字會(huì)以 BASE#NUMBER 的方式進(jìn)行求值(不能超出當(dāng)前shell支持整數(shù)的范圍)
樣例-1. 數(shù)字常量的表示
#!/bin/bash
# numbers.sh: 不同進(jìn)制數(shù)的表示
# 十進(jìn)制數(shù): 默認(rèn)
let "dec = 32"
echo "decimal number = $dec" # 32
# 一切正常译荞。
# 八進(jìn)制數(shù): 帶前導(dǎo)'0'的數(shù)
let "oct = 032"
echo "octal number = $oct" # 26
# 結(jié)果以 十進(jìn)制 打印輸出了县貌。
# ------ ------ -----------
# 十六進(jìn)制數(shù): 帶前導(dǎo)'0x'或'0X'的數(shù)
let "hex = 0x32"
echo "hexadecimal number = $hex" # 50
echo $((0x9abc)) # 39612
# ^^ ^^ 雙圓括號(hào)進(jìn)行表達(dá)式求值
# 結(jié)果以十進(jìn)制打印輸出涵卵。
# 其他進(jìn)制數(shù): BASE#NUMBER
# BASE 范圍: 2 - 64
# NUMBER 必須以 BASE 規(guī)定的正確形式書(shū)寫(xiě)侮措,如下:
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
# 這種表示法只對(duì)進(jìn)制范圍(2 - 64)內(nèi)的 ASCII 字符有效规伐。
# 10 數(shù)字 + 26 小寫(xiě)字母 + 26 大寫(xiě)字母 + @ + _
echo
echo $((36#zz)) $((2#10101010)) $((16#AF16)) $((53#1aA))
# 1295 170 44822 3375
# 重要提醒:
# ---------
# 使用超出進(jìn)制范圍以外的符號(hào)會(huì)報(bào)錯(cuò)。
let "bad_oct = 081"
# (可能的) 報(bào)錯(cuò)信息:
# bad_oct = 081: value too great for base (error token is "081")
# Octal numbers use only digits in the range 0 - 7.
exit $? # 退出碼 = 1 (錯(cuò)誤)