• Linux命令(6/28)——declare/typeset命令


    declare 与 typeset 命令是bash的内建命令,两者是完全一样的,用来声明shell变量,设置变量的属性。

     declare命令(别名typeset)属shell内建命令,用于申明shell变量并设置变量属性,或查看已定义的shell变量和函数。若不加上任何参数,则会显示全部的shell变量与函数(与执行set指令的效果相同)。

    常用命令参数

    1. -r 设置变量为只读

    2. -i 设置变量为整数

    3. -a 设置变量为数组array

    4. -f 如果后面没有参数的话会列出之前脚本定义的所有函数,如果有参数的话列出以参数命名的函数

    5. -x 设置变量在脚本外也可以访问到

    -a:申明数组变量 -A:申明关联数组,可以使用字符串作为数组索引 -f:仅显示已定义的函数 -F:不显示函数定义 -i:声明整型变量 -l:将变量值的小写字母变为小写 -u:变量值的大写字母变为大写 -r:设置只读属性 -t:设置变量跟踪属性,用于跟踪函数进行调试,对于变量没有特殊意义 -x:将指定的shell变量换成环境变量 -p:显示变量定义的方式和值 +:取消变量属性,但是+a和+r无效,无法删除数组和只读属性,可以使用unset删除数组,但是unset不能删除只读变量   

    (1)定义关联数组并访问。

    declare -A assArray=([lucy]=beijing [yoona]=shanghai)
    
    #读取关联数组全部内容
    echo ${assArray[*]}
    #或
    echo ${assArray[@]}
    #输出
    beijing shanghai
    
    #读取指定索引的数组值
    echo ${assArray[lucy]}
    #输出:
    beijing
    
    #列出数组索引列表
    echo ${!assArray[*]}
    #或
    echo ${!assArray[@]}
    #输出
    yoona lucy

    (2)定义只读变量

    declare -r name1="lvlv1"
    #或
    typeset -r name2="lvlv2"
    #或
    readonly name3="lvlv3"

    Shell规定,只读变量生命周期与当前Shell脚本进程相同,且不能消除只读属性和删除只读变量,除非kill当前Shell脚本进程。

    (3)使用-p选项显示变量name1和name2的定义方式和当前值。

    declare -p name1 name2 name3
    #输出
    declare -r name1="lvlv1"
    declare -r name2="lvlv2"
    declare -r name3="lvlv3"

    (4)使用-x选项将shell变量转换为临时环境变量,供当前Shell会话的其他shell进程使用,退出当前Shell会话则失效。

    declare -x name1;

    (5)显示所有shell环境变量。

    declare -x

    (6)使用+x选项取消变量为环境变量。

    delcare +x name1

    (7)申明整型变量,赋值浮点型数值将报错。

    declare -i integer=666

    格式:declare -p var

    格式:typeset -p var

    显示指定变量var的值。

    格式:declare var=value

    格式:typeset var=value

    格式:var=value

    声明变量并赋值。

    格式:declare -i var

    格式:typeset -i var

    将变量var定义成整数。在之后就可以直接对表达式求值,结果只能是整数。如果求值失败或者不是整数,就设置为0。

    格式:declare -r var

    格式:typeset -r var

    格式:readonly var

    将变量var声明为只读变量。只读变量不允许修改,也不允许删除。

    格式:declare -a var

    格式:typeset -a var

    将变量var声明为数组变量。但这没有必要。所有变量都不必显式定义就可以用作数组。事实上,在某种意义上,似乎所有变量都是数组,而且赋值给没有下标的变量与赋值给"[0]"相同。

    格式:declare -f

    格式:typeset -f

    显示所有自定义函数,包括名称和函数体。

    格式:declare -F

    格式:typeset -F

    显示所有自定义函数名称。

    格式:declare -f func

    格式:typeset -f func

    只显示指定函数func的函数定义。

    格式:declare -x var

    格式:typeset -x var

    格式:export var

    将变量var设置成环境变量,这样在随后的脚本和程序中可以使用。

    格式:declare -x var=value

    格式:typeset -x var=value

    格式:export var=value

    将变量var设置成环境变量,并赋值为value。

    Linux下Bash的变量使用,echo,read,declare,typeset,array,local

    变量设定规则

    1、变量与变量内容用一个等号来连接

    myname=del1214

    2、等号两边不能直接接空格,下面的赋值是错误的

    myname = del1214 或 myname= del  1214

    3、变量名只能是英文字母与数字,但第一个字符不能使数字,下面是错误的

    1myname=del1214

    4、变量内容有空格符可以用双引号"或单引号'使内容连接起来,但

    双引号内的特殊字符$,可以保留原有的特性,如下:

    var="lang  is  $LANG"  则echo  $var  显示  lang  is  en_US

    单引号内的特殊字符则为一般字符,如下:

    var='lang  is  $LANG'  则echo  $var  显示  lang  is  $LANG

    5、使用转义字符将特殊符号(回车,$,\,空格,'等)变成一般字符
    6、在变量中使用命令,需要用`命令`或$(命令),例如取得内核版本号

    version=$(uname -r)

    echo  $version

    2.6.xxxxxxxxx

    7、变量内容相加(字符串相加),使用"$变量名"或${变量},例如:

    PATH="$PATH":/home/bin

    8、将变量转为环境变量,使用export命令

    export  PATH

    9、环境变量一般为全大写字母,自定义变量使用小写字母
    10、取消变量命令unset,unset  变量名

    变量由键盘输入read

    要读取来自键盘输入的变量,使用read指令

    read  [-pt]  变量名

    -p:  后面接提示字符

    -t:   后面接等待的秒数

    例如:

    read -p "please type your name" -t 10 yourname

    变量类型的定义declare/typeset

    declare

    declare  [-aixr]  变量名

    -a:  将后面的变量名定义为数组array类型

    -i:   将后面的变量名定义为整数数字integer类型

    -x:   将后面的变量名定义为环境变量,功能同export

    +x:  取消环境变量

    -r:   将变量名定义为readonly类ing,不能更改不能unset

           只读属性一旦确定,只能通过注销再登陆来恢复该变量的类型

    bash对变量类型的基本定义

    变量类型默认为字符串,不明确指定类型就是字符串,1+2是字符串不会自动算成3

    bash中的数值运算只能是整数,1/3结果是0

    typeset

    typeset  [-aAfFgilrtux]  [-p]  name[=value]

    说明不是很全,还是用declare吧

    变量中数组array的使用

    设定方法:

    var[index]=content

    例如:

    var[1]="aaa"

    var[2]="bbb"

    var[3]="ccc"

    echo "${var[1]},${var[2]},${var[3]}"

    aaa,bbb,ccc

    变量内容的删除与替换

    变量设定方式
    说明
      ${变量#关键词}
      ${变量##关键词}
    若变量内容从【头】开始的数据符合关键词,则将符合的最【短】数据删除
    若变量内容从【头】开始的数据符合关键词,则将符合的最【长】数据删除
      ${变量%关键词}
      ${变量%%关键词}
    若变量内容【从后向前】的数据符合关键词,则将符合的最【短】数据删除
    若变量内容【从后向前】的数据符合关键词,则将符合的最【长】数据删除
      ${变量/旧字符串/新字符串}
      ${变量//旧字符串/新字符串}
    若变量内容符合旧字符串则【第一个】旧字符串会被新字符串取代
    若变量内容符合旧字符串则【全部的】旧字符串会被新字符串取代

    变量内容的判断与替换

    变量设定方式str没有设定nullstr为空字符串""str已设定为非空字符串
      var=${str-expr}
      var=${str:-expr}
      var=expr
      var=expr
      var=
      var=expr
      var=$str
      var=$str
      var=${str+expr}   var=   var=expr   var=expr
      var=${str:+expr}   var=   var=   var=expr
      var=${str=expr}


      var=${str:=expr}
      str=expr
      var=expr

      str=expr
      var=expr
      str不变
      var=

      str=expr
      var=expr
      str不变
      var=$str

      str不变
      var=$str
      var=${str?expr}   expr输出至stderr   var=   var=$str
      var=${str:?expr}   expr输出至stderr   expr输出至stderr   var=$str

    我个人的理解是

    -:变量中不包含后面字符串时

    +:变量中包含后面字符串时

    =:变量等于后面字符串时

    ?:输出

    :冒号:变量为空字符串时取不加冒号时相反的动作

  • 相关阅读:
    flex>导航
    flex>图表控件
    Struts2>Cannot find the tag library descriptor for /strutstags
    jsp>Smartupload例子代码
    flex>MXML语法
    解决JBoss只能通过localhost(127.0.0.1)而不能通过IP访问
    jsp>tomcat配置虚拟目录
    JSF>概述
    Struts2>中文乱码
    flex>HttpService
  • 原文地址:https://www.cnblogs.com/klb561/p/9236468.html
Copyright © 2020-2023  润新知