`

shell 整型变量定义

阅读更多
4.8 定义整型变量命令declare -i

用带选项-i 的declare 命令,可以使变量具有整数(integer)属性。Bash 本质上只有字符型变量,但通常也可以说:定义整型变量。

例如,希望得到45+20 的整数运算结果:


    $ M=45+20 
    $ echo $M 
    45+20

执行M=45+20 之后,M 的值为字符串45+20 , 而不是希望得到的65 。执行M=$((45+20),或let M=45+20 才能得到65。如果事先声明变量是整型数,就不必使用$((…))或者let。见下例:


    $ declare -i K 
    $ K=45+20 
    $ echo $K 
    65

再看一个例子。C 被声明为整型变量,所以C 的值为15+30=45;D 没有被声明为整型,所以D 的值是字符串15+30,而不是期望得到的45:


    $ A=15 B=30
    $ declare -i C=$A+$B 
    $ D=$A+$B 
    $ echo C=$C, D=$D 
    C=45, D=15+30

如果整型数被赋值为字符或不带空格的字符串时,系统不会报错,并且整型变量实际被赋值为0:

    $ declare -i M # 声明整型变量M 
    $ M="web" # 变量M 被赋值为无空格的字符串 
    $ echo $M 
    0 # 显示M 的值为0

整型数被赋值为带空格的字符串时,系统将报错:

    $M="web site" # 变量M 被赋值为带空格的字符串,出错 
    bash: web site: syntax error in expression (error token is "site")

前面提到的数都是十进制数,Bash 支持其他进制的数,支持的范围是从二进制到六十四进制。非十进制数赋值的格式为:


    变量=基数#数值

基数的取值范围为2 到64,常用的有二进制、八进制、十六进制等。例如:

    $ declare -i x 
    $ x=2#110 # 二进制的110 赋给x 
    $ echo $x 
    6 # 二进制的110 就是十进制的6 
    $ x=8#16 # 八进制的16 赋给x 
    $ echo $x 
    14 # 八进制的16 就是十进制的14 
    $ x=16#2A # 十六进制的2A 赋给x 
    $ echo $x 
    4 2 # 十六进制的2A 就是十进制的42

以0 开头的数表示八进制数,以0x 开头的数表示十六进制数,这一点与C 语言一致。例如:


    $ x=025 # 八进制的25 赋给x 
    $ echo $x 
    21 # 八进制的25 就是十进制的21 
    $ x=0x25 # 十六进制的25 赋给x 
    $ echo $x 
    37 # 十六制的25 就是十进制的37

赋值时,某一位数大于基数的话,赋值将失败。例如:


    $ x=029 # 以0 开头的为八进制数,数字只能取0 到7,9 超出基数,赋值失败 
    bash: 029: value too great for base (error token is "029") 
    $ x=16#2G # 十六进制数字只能取0 到9、A 到F,G 超出基数,赋值失败 
    bash: 16#2G: value too great for base (error token is "16#2G")
分享到:
评论

相关推荐

    shell算数运算

    可以对已定义的整型变量执行算术运算(如果变量未被定义为整型变量, 内置的let命令也允许算术操作。见本节let命令部分)。如果给整型变量赋一个浮点数值,则bash将报告语法错误。数字可以用不同基数的数字表示,如 二...

    适用于stm32的shell代码和例程

    3,新建全局变量 struct shell_input serial_shell ; 并初始化 SHELL_INPUT_INIT(&serial;_shell ,usart_puts);初始化输入缓存和输出交互; 4,串口接收到一整包函数后,调用 shell_input(&serial;_shell , packet ,...

    Linux C程序设计大全

    3.7.4 关于printf函数的疑问——缺少整型参数 3.7.5 关于printf函数的疑问——缺少字符串地址参数 第4章 C语言中的指针与字符串 4.1 sizeof运算符 4.1.1 sizeof运算符的应用——得到内置类型的大小 4.1.2 sizeof...

    Linux高级bash编程

    在1913年的韦氏词典中查找定义 12-17. 检查列表中单词的正确性 12-18. 转换大写: 把一个文件的内容全部转换为大写. 12-19. 转换小写: 将当前目录下的所有文全部转换为小写. 12-20. Du: DOS 到 UNIX 文本文件的转换....

    Advanced Bash-Scripting Guide <>

    在1913 年的韦氏词典中查找定义 12-17. 检查列表中单词的正确性 12-18. 转换大写: 把一个文件的内容全部转换为大写. 12-19. 转换小写: 将当前目录下的所有文全部转换为小写. 12-20. Du: DOS 到 UNIX 文本文件的转换...

    宋劲彬的嵌入式C语言一站式编程

    1. 整型 2. 浮点型 3. 类型转换 3.1. Integer Promotion 3.2. Usual Arithmetic Conversion 3.3. 由赋值产生的类型转换 3.4. 强制类型转换 3.5. 编译器如何处理类型转换 16. 运算符详解 1. 位运算 1.1. 按位与、或、...

    嵌入式Linux C编程入门(第2版) PPT

    4.3.1 变量的定义 107 4.3.2 typedef 113 4.3.3 常量定义 114 4.3.4 arm-linux基本数据类型综合应用实例 115 4.4 运算符与表达式 118 4.4.1 算术运算符和表达式 119 4.4.2 赋值运算符和表达式 ...

    C/C++程序员面试指南.杨国祥(带详细书签).pdf

    面试题4:设置地址为0x67a9的整型变量的值为0xaa66 面试题5:评论下面这个中断函数 面试题6:评价一个代码片段 第8章 面向对象 8.1 面向对象的基本概念 面试题1:谈谈你对面向对象的认识 面试题2:面向对象的三大...

    SQL sever 实训

    SQL sever 2008 Rar! ?s X祕BwL0 17240671-1.sql ?年3月9日 --1.查询course表的所有信息(所有行所有列) USE Xk GO SELECT * FROM Course --有哪些种类的选修课?学分是多少 USE XK ...MAXSIZE=...

Global site tag (gtag.js) - Google Analytics