这篇文章主要是介绍shell的变量。主要有:用户创建的变量、关键字变量和变量属性三个方面的内容。

对于变量,默认是常量为大写,变量为小写或者大小写命名。变量名必须是字母或者下划线开头,不能是数字开头。在Bourne Again Shell中变量赋值直接是等于号

eg myvar=a;
等号两边没有空格,在TC Shell中是 set myvar = a。

1:首先是用户创建的变量:
1.1:参数替换
$ person=max    #赋值
max                   #打印的内容
然后我们看看接下来的命令
$ echo $person          #打印person
max                             #打印的内容,下面同理,$是输入命令的一行
$ echo   "$person"
max
$ echo '$person'
$person          #打印的结果就是$person,没有替换
$ echo \$person
$person         #打印的结果就是$person,没有替换
从上面的例子可以看出,双引号对于参数而言没有啥影响,单引号和\ 可以阻止参数被替换。

虽然双引号不能阻止参数被替换,但是他仍然有作用。
$ person1="max and min"
$ person2=max and min
这两句话是不同的,前者打印person1是max and min ,后者打印就会出错,因为无法解析后面的空格!
双引号的第二个特点就是在路径名的展开中了
1.2:路径名的展开
假设当前路径下有maxmemo max.txt两个文件
eg
$ memo=max*
$ echo  $"memo"  #命令,有双引号,打印memo
max*                  #输出结果
$ echo $memo 
maxmemo max.txt  #输出的结果是进行了匹配的
可以看到,不加双引号对路径名字进行了匹配。
当然对于这个取变量的语法,其实最严格的用法应该是${memo},某些场合也许要用到这种形式。
1.3:unset删除变量
$ unset person #删除person变量

2:变量属性
2.1 readonly只读属性
$ readonly person #对已经有的person进行属性变更,此后person的值不能改变。
2.2 declare和typeset:为变量赋予属性
这两个是相同意思和用法的两个命令。承接的属性有
-a    声明一个数组
-f   声明一个函数名变量
-i   声明一个int型变量
-r   只读,类似于readonly
-x   输出变量,也可用export
eg:
$ declare person=max
$ declare -r person2=min  #声明只读的person2
$ declare -rx person3=nick    #等同于 declare -r -x person3=nick或者declare -x -r person3=nick
$ declare -x person4  #全局变量,初始不用赋值,为空,可用于所有shell
$ declare +x person3    #person3不在是全局变量,仍然只读,+可以删除属性

3:关键字变量(不做详细说明)
关键字变量可以继承,这里不做详细的说明,只是列出大类,提供整体框架。
HOME:用户主目录
PATH:shell查找程序的路径
MAIL:保存电子邮件的地方
PS1:用户主提示符,可以更改用户命令提示符,一般前面是$,root运行时是#,还可以自定义为其它的
PS2:用户辅助提示符
PS3:菜单提示符
PS4:调试提示符
IFS:分隔输入字段,默认是空格,制表符和换行符,通过IFS命令还可以扩展为其它的。比如 IFS=":"则,冒号也成为一个分隔符。
CDPATH:扩大cd的范围。


以上就是shell中的变量的知识点。最重要的是掌握用户变量和属性的用法。对于关键字变量,一般用不上。