美文网首页Shell学习笔记
Shell变量的高级用法(五)——有类型变量

Shell变量的高级用法(五)——有类型变量

作者: 醜捌怪 | 来源:发表于2022-01-24 20:13 被阅读0次

    declare和typeset命令

    • declare命令和typeset命令两者等价
    • declare命令和typeset命令都是用来定义变量类型的

    declare命令参数表

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

    取消声明的变量

    • declare +r
    • declare +i
    • declare +a
    • declare +X

    示例

    例子1:将变量声明为只读

    ➜ ~ declare -r var="hello"
    ➜ ~ var="world"
    zsh: read-only variable: var

    var变量声明为只读变量,再次对变量赋值时会报错"zsh: read-only variable: var"。如果想要重新对var赋值,可以使用declare +r var对var变量取消只读声明。

    例子2:声明变量为整型

    ➜ ~ num1=2001
    ➜ ~ num2=num1+1 ➜ ~ echonum2
    2001+1

    如果直接为声明变量类型的话,默认按字符串处理。所以$num1+1输出的结果为"2001+1"。

    ➜ ~ declare -i num2
    ➜ ~ num2=num1+1 ➜ ~ echonum2
    2002

    通过变量声明将num2声明为整型之后,输出预期结果"2002"。

    例子3:在脚本中显示定义的函数和内容

    ➜ ~ declare -f

    输出:

    current_branch () {
        git_current_branch
    }
    d () {
        if [[ -n $1 ]]
        then
            dirs "$@"
        else
            dirs -v | head -n 10
        fi
    }
    default () {
        (( $+parameters[$1] )) && return 0
        typeset -g "$1"="$2" && return 3
    }
    ...
    

    例子4:在脚本中显示定义的函数(只显示函数名,不显示具体实现)。

    ➜ ~ declare -F

    输出:

    current_branch
    d
    default
    ...

    例子5:声明一个数组
    定义一个数组array并初始化

    ➜ ~ declare -a array
    ➜ ~ array=("jones" "mike" "kobe" "jordan")

    输出全部内容

    ➜ ~ echo ${array[@]}
    jones mike kobe jordan

    输出下标索引为1的内容

    ➜ ~ echo ${array[1]}
    jones

    获取数组元素个数

    ➜ ~ echo ${#array}
    4

    数组内下标索引为1的元素长度

    ➜ ~ echo ${#array[1]}
    5

    给数组下标为1的元素赋值为"huang"

    ➜ ~ array[1]="huang"
    ➜ ~ echo $array
    huang mike kobe jordan

    在数组尾部添加一个新元素

    ➜ ~ array[10]="zhou"
    ➜ ~ echo $array
    huang mike kobe jordan zhou

    清空整个数组

    ➜ ~ unset array
    ➜ ~ echo $array
    <空>

    例子6:声明环境变量
    终端中声明一个变量num5

    ➜ ~ num5=30
    ➜ ~ echo $num5
    30

    在test.sh脚本文件中引用变量num5

    #!/bin/bash
    
    echo $num5
    

    执行脚本

    ➜ ~ sh test.sh
    <空>

    因为num5不是环境变量,所以在test.sh脚本文件中无法访问。
    将num5声明为环境变量

    ➜ ~ declare -x num5
    ➜ ~ sh test.sh
    30

    执行test.sh脚本,输出了num5变量的值。

    相关文章

      网友评论

        本文标题:Shell变量的高级用法(五)——有类型变量

        本文链接:https://www.haomeiwen.com/subject/xgxihrtx.html