zoukankan      html  css  js  c++  java
  • 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" )'

     
  • 相关阅读:
    Microsoft.NET Framework 全面开源
    SqlCommandBuilder笔记[原]
    C#几种排序方法的整理[原]
    无聊用js写了一个模拟的购物车[原]
    Visio2005数据库建模视频[原]
    JavaScript读取XML文件[整理]
    IIS中对NetFrameWork进行注册
    时间不等人 创业准备开始了
    用CSS和HTML标签来截取过长的文字部分变成省略号
    C#在SQl中存取图片image[原]
  • 原文地址:https://www.cnblogs.com/mianbaoshu/p/12069541.html
Copyright © 2011-2022 走看看