Linux命令(6/28)——declare/typeset命令
declare 与 typeset 命令是bash的内建命令,两者是完全一样的,用来声明shell变量,设置变量的属性。
declare命令(别名typeset)属shell内建命令,用于申明shell变量并设置变量属性,或查看已定义的shell变量和函数。若不加上任何参数,则会显示全部的shell变量与函数(与执行set指令的效果相同)。
常用命令参数
-r 设置变量为只读
-i 设置变量为整数
-a 设置变量为数组array
-f 如果后面没有参数的话会列出之前脚本定义的所有函数,如果有参数的话列出以参数命名的函数
-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 |
str不变 var= str=expr |
str不变 var=$str str不变 |
var=${str?expr} | expr输出至stderr | var= | var=$str |
var=${str:?expr} | expr输出至stderr | expr输出至stderr | var=$str |
我个人的理解是
-:变量中不包含后面字符串时
+:变量中包含后面字符串时
=:变量等于后面字符串时
?:输出
:冒号:变量为空字符串时取不加冒号时相反的动作
Linux命令(6/28)——declare/typeset命令的更多相关文章
- Linux环境变量设置declare/typeset
形而上,质在内!形形色色,追寻本质! declare/typeset declare 或 typeset 是一样的功能,就是在宣告变数的属性 declare 后面并没有接任何参数,那么bash 就会主 ...
- 每天一个Linux命令(28)df命令
报告文件系统磁盘空间的使用情况.获取硬盘被占用了多少空间,目前还剩下多少空间等信息. (1)用法: 用法: df [选项] [文件] (2)功能: 功能: 显示 ...
- linux命令(28):Linux下SCP无需输入密码传输文件,python 中scp文件
python 中scp文件:(如果下面的发送免密码已经完成的话,就直接能用下面这个) os.system('scp "%s" "%s:%s"' % (" ...
- 学习 Linux,101: 使用基本 SQL 命令
概述 在本教程中,将学习结构化查询语言 (SQL),包括: 使用基本 SQL 命令 执行基本数据操作 本教程将简要介绍您需要知道的与 LPI 102 考试相关的 SQL 概念. 回页首 数据库和 ...
- linux命令(8)kill命令
kill命令: Linux中的kill命令用来终止指定的进程(terminate a process)的运行,是Linux下进程管理的常用命令.通常,终止一个前台进程可以使用Ctrl+C键,但是,对于 ...
- 检查和收集 Linux 硬件信息的 7 个命令
http://blog.sae.sina.com.cn/archives/3910 在Linux系统中,有许多命令可用于查询主机的硬件信息.一些命令只针对特定的硬件组件,比如CPU.内存,一些命令可以 ...
- 1分钟内检查Linux服务器性能的10条命令
如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出Linux性能问题所在?Netflix性能工程团队的Brendan Gregg写下了这篇博文,来看他们是怎样通过十条命 ...
- [Linux] killall 、kill 、pkill 命令详解
killall 命令 Linux系统中的killall命令用于杀死指定名字的进程(kill processes by name).我们可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀 ...
- linux下维护服务器之常用命令
linux下维护服务器之常用命令! 第1套如下: 正则表达式: 1.如何不要文件中的空白行和注释语句: [root@localhost ~]# grep -v '^$' 文件名 |grep -v '^ ...
随机推荐
- 转:Python的这几个技巧,简直屌爆了
经使用Python编程有多年了,即使今天我仍然惊奇于这种语言所能让代码表现出的整洁和对DRY编程原则的适用.这些年来的经历让我学到了很多的小技巧和知识,大多数是通过阅读很流行的开源软件,如Django ...
- grep检索文本
grep [OPTIONS] PATTERN [FILE...] grep zifuchuan * 不行的话来一个: grep zifuchuan */* 不行的话再来一个: grep zifuc ...
- LeetCode 第 231 题 (Power of Two)
LeetCode 第 231 题 (Power of Two) Given an integer, write a function to determine if it is a power of ...
- push certificate
developer_identity.cer <= download from Applemykey.p12 <= Your private key openssl x509 -in de ...
- Bootstrap的下拉菜单float问题
在学习bootstrap中的下拉菜单时,遇到下面情况: <div class="dropdown"> <button class="btn btn-de ...
- PostgreSql Partition + Hibernate Insert
与Oracle不同.PostgreSQL须要手动控制分区规则触发器. 步骤一:创建分区 CREATE TABLE table_partition_1( CHECK partition_column c ...
- iOS-常用宏定义
下面我为大家提供一些常用的宏定义! 将这些宏定义 加入到.pch使用 再也不用 用一次写一次这么长的程序了 //-------------------获取设备大小------------------- ...
- sql server数据库,禁用启用触发器各种情况!
一.禁用和启用单个触发器 禁用: ALTER TABLE trig_example DISABLE TRIGGER trig1 GO 恢复: ALTER TABLE trig_example ENAB ...
- jquery练习题
1.自定义登录校验 用户输入用户名和密码 输入的用户名和密码不能为空 如果用户输入的用户名或者密码为空,你就提示它用户名不能为空或者密码不能为空. 知识点:文本操作相关 <!DOCTYPE ht ...
- Storm-源码分析- bolt (backtype.storm.task)
Bolt关键的接口为execute, Tuple的真正处理逻辑, 通过OutputCollector.emit发出新的tuples, 调用ack或fail处理的tuple /** * An IBolt ...