1、通过 declare 和 typeset 命令

  • declare 和 typeset 两者等价
  • declare 和 typeset 都是用来定义变量类型的
  • 下面以 declare 进行总结

2、declare 参数如下

  • -r   将变量设置为只读
  • -i   将变量设置为整数
  • -a  将变量设置为数组
  • -F  显示此脚本前定义过的所有函数及内容
  • -f   仅显示此脚本前定义过的函数名
  • -x  将变量声明为环境变量

3、举例:

例1: 声明为不可变形式, declare -r

  $ var=hello

  $ var=world

  $ echo $var

  打印出:world     // 说明 var是可变的

  $ declare -r var=hello

  $ var=world  

  打印结果:-bash: var: 只读变量

例2:声明为整型, declare -i

  $ num=10

  $ num2=$num+20

  $ echo $num2

  打印出:10+20

  $ expr $num + 20

  打印出:30

  

  $ num=10

  $ declare -i num3

  $ num3=$num+90

  $ echo $num3

  打印出:100

例3:显示出系统中定义的 函数名及函数体

  $ declare -F

例4: 显示出系统中定义的所有函数的函数名

  $ declare -f

例5:声明为数组, declare -a

  $ declare -a array       // 声明一个数组

  $ array=("jones" "mike" "kobe" "jordan")     // 赋值

  输出数组内容:

    $ echo ${array[@]}    //  输出全部内容,打印出:jones mike kobe jordan

     $ echo ${array[0]}     // 输出数组元素下标为0的值,打印出:jones

  获取数组长度:

    $ echo ${#array[@]}     // 输出数组长度,打印出:4

    $ echo ${#array[0]}     // 输出数组第0个元素的长度,打印出:5

  给数组某个下标赋值:

    $ array[0]=lisi

    $ echo ${array[@]}     // 输出:lisi mike kobe jordan

  给数组尾部添加一个元素:

    $ array[10]=zhangsan    // 下标必须大于数组长度 - 1,可以大很多

  删除元素:

    $ unset array[2]    // 删除数组的第三个元素

    $ unset array   // 清空整个数组

  分片访问:

    $ echo ${array[@]:1:3}     // 从下标为 1 的位置开始,向后取 3个元素,忽略中间的空元素,直到取够 3个元素。如果元素不足3个,则输出后面的所有元素即可。

  内容替换:

    $ array2=${array[@]/ke/KE}    // 将数组中所有 ke 替换为 KE。

    $ echo ${array2[@]}

  数组遍历:

    for v in ${array[@]}

    do

      echo $v

    done 

例6: 声明为环境变量  declare -x     

   $ declare -x num    // num 成为环境变量后,就可以在脚本中直接使用。   如果不是环境变量,则只能在这个终端里面使用。

4、取消声明的变量

  declare +r

  declare +i

  declare +a

  declare +x

总结:向数组array [0,1,2,3,4]末尾添加元素,如果数组长度为5,添加新元素 7的时候下标指向的是 7,那么数组为 [0,1,2,3,4, , ,7],这时候数组长度为6,此时 array[5] 和 array[6] 值为空,array[7] 的值为7。 

    

最新文章

  1. javascript 键盘输入过滤,只能输入数字,小数一位且只能输入5
  2. 网站为什么要做SEO
  3. 各浏览器抗uaf机制
  4. remove() 方法的兼容问题
  5. Logic and Fault simulation
  6. hdu 5264 pog loves szh I
  7. 举例详细说明javascript作用域、闭包原理以及性能问题(转)
  8. [译]GC专家系列2:Java 垃圾回收的监控
  9. 实现自动备份MySQL数据库
  10. Webdriver+Java实现使用cookie跳过登录
  11. 基于FFMPEG的跨平台播放器实现
  12. 从HTTP/0.9到HTTP/2:一文读懂HTTP协议的历史演变和设计思路
  13. springBoot框架的搭建
  14. 踏得网互联网新技术垂直搜索服务和分享 - HTML5动效/特效/动画搜索
  15. Jenkins之常用变量
  16. Objc的底层并发API
  17. Mybatis返回List<Map<K,V>>
  18. python_距离测量
  19. python的多线程和守护线程
  20. TCP的几个状态(SYN/FIN/ACK/PSH/RST)

热门文章

  1. Map.putAll方法
  2. [ Servlet / JSP ] J2EE Web Application 中的 JSESSIONID 是什么?
  3. c++有关构造函数、析构函数和类的组合的一个简单例子
  4. 如何为Rails作贡献:例增加rich_text field generators
  5. list<实体类>互相嵌套和前台取值问题
  6. javascript高级程序设计第3版——第6章 面向对象的程序设计
  7. fetch跨域浏览器请求头待研究
  8. 关于分布式代码管理工具git
  9. vue2.0项目 calendar.js(日历组件封装)
  10. Java多线程之synchronized及其优化