• 6-x3 declare和typeset命令:设置变量属性


    declare 和 typeset 都是 Shell 内建命令,它们的用法相同,都用来设置变量的属性。不过 typeset 已经被弃用了,建议使用 declare 代替。

    declare 命令的用法如下所示:declare [+/-] [aAfFgilprtux] [变量名=变量值]

    其中,-表示设置属性,+表示取消属性aAfFgilprtux都是具体的选项,它们的含义如下表所示:

    选项
    含义
    -f [name] 列出之前由用户在脚本中定义的函数名称和函数体。
    -F [name] 仅列出自定义函数名称。
    -g name 在 Shell 函数内部创建全局变量。
    -p [name] 显示指定变量的属性和值。
    -a name 声明变量为普通数组。
    -A name 声明变量为关联数组(支持索引下标为字符串)。
    -i name  将变量定义为整数型。
    -r name[=value]  将变量定义为只读(不可修改和删除),等价于 readonly name。
    -x name[=value] 将变量设置为环境变量,等价于 export name[=value]。
     
    举栗
    知识点
    -i 将变量定义为整数型
    对比测试
    举栗
    结果
    普通定义变量
    1. a=3
    2. b=4
    3. echo $a+$b

    3+4

    普通定义变量
    1. a=3
    2. b=4
    3. c=$a+$b
    4. echo $c
    3+4
    declare -i定义变量
    1. declare -i a b
    2. a=3
    3. b=4
    4. echo $a+$b
    3+4
    declare -i定义变量
    1. declare -i a b c
    2. a=3
    3. b=4
    4. c=$a+$b
    5. echo $c
    7

     

     

    -r 将变量定义为只读

    (不可修改和删除)

    declare -r n=10

    echo $n———>10

    n=30———>报错

    -bash: m: 只读变量

    普通变量可以通过unset删除,但是只读变量不可修改不可删除
    -p 显示指定变量的属性和值

    roaddb@standalone:~$ declare -r r=10

    roaddb@standalone:~$ declare -p r

    declare -r r="10"

    roaddb@standalone:~$ a=5

    roaddb@standalone:~$ declare -p a

    declare -- a="5"

    -x 将变量设置为环境变量

    roaddb@standalone:~$ export env_var=test1

    roaddb@standalone:~$ declare -x env_var2=test2

    roaddb@standalone:~$ env|grep env_var*

    env_var2=test2

    env_var=test1

    roaddb@standalone:~$ declare -p env_var2

    declare -x env_var2="test2"

    roaddb@standalone:~$ declare -p env_var

    declare -x env_var="test1"

    1.使用export或 declare -x可以设置环境变量

    2.env可以查看所有的环境变量

    -f 列出之前由用户在脚本中定义的函数名称和函数体    
    -F 仅列出自定义函数名称    
    -g 在 Shell 函数内部创建全局变量  

    1.全局变量的知识点

    1)在 Shell 中定义的变量,默认就是全局变量

    2)全局变量的作用范围是当前的 Shell 进程,而不仅仅是当前的 Shell 脚本文件

    -a 声明变量为普通数组

    roaddb@standalone:~$ arr1=('a' 'b' 'c')

    roaddb@standalone:~$ echo ${arr1[*]}

    a b c

    roaddb@standalone:~$ declare -p arr1

    declare -a arr1='([0]="a" [1]="b" [2]="c")'

    roaddb@standalone:~$ declare -a arr2=('aa' 'bb' 'cc')

    roaddb@standalone:~$ echo ${arr2[*]}

    aa bb cc

    roaddb@standalone:~$ declare -p arr2

    declare -a arr2='([0]="aa" [1]="bb" [2]="cc")'

    使用arr1=('a' 'b' 'c')或declare -a arr2=('a' 'b' 'c')的方式创建数组,其效果是一样的
    -A 声明变量为关联数组(支持索引下标为字符串)

    roaddb@standalone:~$ declare -A arr3=(['aa']='bb' ['cc']='dd' ['ee']='ff')

    roaddb@standalone:~$ declare -p arr3

    declare -A arr3='([aa]="bb" [ee]="ff" [cc]="dd" )'

     
  • 相关阅读:
    struts2+hibernate+Spring分层开发
    (江苏大学)校园网上网帮助工具开发详解(附源码)【行政教学区】【城市热点】
    [CLR的执行模型].NET应用程序是如何执行的?
    ASP.NET服务器对于请求的处理过程
    【简单Web服务器搭建】基于Socket实现的最简单的Web服务器【ASP.NET原理分析】
    ASP.NET 页生命周期和页面事件处理管道
    【分析总结】ASP.NET中的状态管理原理
    【CLRsos调试】关于方法表继承调用问题的总结
    【分析最原始验证码生成】HTTP请求处理程序
    [ASP.NET]Session在多个站点之间共享解决方案
  • 原文地址:https://www.cnblogs.com/mianbaoshu/p/12069541.html
Copyright © 2020-2023  润新知