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没有设定null str为空字符串"" 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

我个人的理解是

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

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

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

?:输出

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

Linux命令(6/28)——declare/typeset命令的更多相关文章

  1. Linux环境变量设置declare/typeset

    形而上,质在内!形形色色,追寻本质! declare/typeset declare 或 typeset 是一样的功能,就是在宣告变数的属性 declare 后面并没有接任何参数,那么bash 就会主 ...

  2. 每天一个Linux命令(28)df命令

    报告文件系统磁盘空间的使用情况.获取硬盘被占用了多少空间,目前还剩下多少空间等信息.       (1)用法:       用法:  df [选项] [文件]       (2)功能: 功能:  显示 ...

  3. linux命令(28):Linux下SCP无需输入密码传输文件,python 中scp文件

    python 中scp文件:(如果下面的发送免密码已经完成的话,就直接能用下面这个) os.system('scp "%s" "%s:%s"' % (" ...

  4. 学习 Linux,101: 使用基本 SQL 命令

    概述 在本教程中,将学习结构化查询语言 (SQL),包括: 使用基本 SQL 命令 执行基本数据操作 本教程将简要介绍您需要知道的与 LPI 102 考试相关的 SQL 概念.   回页首 数据库和 ...

  5. linux命令(8)kill命令

    kill命令: Linux中的kill命令用来终止指定的进程(terminate a process)的运行,是Linux下进程管理的常用命令.通常,终止一个前台进程可以使用Ctrl+C键,但是,对于 ...

  6. 检查和收集 Linux 硬件信息的 7 个命令

    http://blog.sae.sina.com.cn/archives/3910 在Linux系统中,有许多命令可用于查询主机的硬件信息.一些命令只针对特定的硬件组件,比如CPU.内存,一些命令可以 ...

  7. 1分钟内检查Linux服务器性能的10条命令

    如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出Linux性能问题所在?Netflix性能工程团队的Brendan Gregg写下了这篇博文,来看他们是怎样通过十条命 ...

  8. [Linux] killall 、kill 、pkill 命令详解

    killall 命令 Linux系统中的killall命令用于杀死指定名字的进程(kill processes by name).我们可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀 ...

  9. linux下维护服务器之常用命令

    linux下维护服务器之常用命令! 第1套如下: 正则表达式: 1.如何不要文件中的空白行和注释语句: [root@localhost ~]# grep -v '^$' 文件名 |grep -v '^ ...

随机推荐

  1. 转:Python的这几个技巧,简直屌爆了

    经使用Python编程有多年了,即使今天我仍然惊奇于这种语言所能让代码表现出的整洁和对DRY编程原则的适用.这些年来的经历让我学到了很多的小技巧和知识,大多数是通过阅读很流行的开源软件,如Django ...

  2. grep检索文本

    grep [OPTIONS] PATTERN [FILE...] grep zifuchuan  * 不行的话来一个: grep zifuchuan  */* 不行的话再来一个: grep zifuc ...

  3. LeetCode 第 231 题 (Power of Two)

    LeetCode 第 231 题 (Power of Two) Given an integer, write a function to determine if it is a power of ...

  4. push certificate

    developer_identity.cer <= download from Applemykey.p12 <= Your private key openssl x509 -in de ...

  5. Bootstrap的下拉菜单float问题

    在学习bootstrap中的下拉菜单时,遇到下面情况: <div class="dropdown"> <button class="btn btn-de ...

  6. PostgreSql Partition + Hibernate Insert

    与Oracle不同.PostgreSQL须要手动控制分区规则触发器. 步骤一:创建分区 CREATE TABLE table_partition_1( CHECK partition_column c ...

  7. iOS-常用宏定义

    下面我为大家提供一些常用的宏定义! 将这些宏定义 加入到.pch使用 再也不用 用一次写一次这么长的程序了 //-------------------获取设备大小------------------- ...

  8. sql server数据库,禁用启用触发器各种情况!

    一.禁用和启用单个触发器 禁用: ALTER TABLE trig_example DISABLE TRIGGER trig1 GO 恢复: ALTER TABLE trig_example ENAB ...

  9. jquery练习题

    1.自定义登录校验 用户输入用户名和密码 输入的用户名和密码不能为空 如果用户输入的用户名或者密码为空,你就提示它用户名不能为空或者密码不能为空. 知识点:文本操作相关 <!DOCTYPE ht ...

  10. Storm-源码分析- bolt (backtype.storm.task)

    Bolt关键的接口为execute, Tuple的真正处理逻辑, 通过OutputCollector.emit发出新的tuples, 调用ack或fail处理的tuple /** * An IBolt ...