8.3 参数和变量
变量 在shell中,shell参数与用户可访问的某个值相关。有几种不同的shell参数。参数的名字由字母、数字和下划线组成,常被称为shell变量,或者简称为变量。变量名必须以字母或者下划线开头,而不能是数字。因此像A76、MY_CAT和___X___都是合法的变量名,而69TH_STREET(以数字开头)和MY-NAME(包含连字符)都不是合法的变量名。
用户创建的变量 用户命名并赋值的shell变量称为用户创建的变量。用户可以在任何时候修改用户创建的变量的值,或者将其设置为只读,这样它们的值就不会发生改变。还可以将用户创建的变量变成全局变量。全局变量(又称为环境变量)可以被任何shell和从最初shell创建的其他程序访问。这里有一个命名约定,即全局变量只使用大写字母,而其他变量则使用大小写混合命名。参见第11.3.2节以获取更多关于全局变量的信息。
在Bourne Again Shell中,使用下面的语法将值赋值为变量:
VARIABLE=value |
等号(=)的两边可以没有空格符。下面是一个赋值的示例:
$ myvar = abc |
而在TC Shell下面,赋值语句必须以字set开头,等号两边的空格符是可选的:
$ set myvar = abc |
Bourne Again Shell允许在命令行中放置变量赋值语句。这些赋值语句只是该命令shell的局部行为,也就是说它们只适用于该命令。shell脚本my_script显示了TEMPDIR的值。下面的命令运行my_script,将TEMPDIR设置为/home/sam/temp。内置命令echo运行结果显示,在运行my_script之后,这个交互式shell中并没有改变TEMPDIR的值。如果TEMPDIR在交互式shell中设置,再按照这种方式运行my_script也不会对它的值有所影响。
$ cat my_script $ |
关键字变量 关键字shell变量(简称为关键字变量)对于shell而言,具有特殊的意义,它们的名字一般比较短而且有助于记忆。当用户启动shell的时候(比如登录),shell将从环境中继承几个关键字变量。HOME和PATH就属于这样的变量。其中,HOME表示用户的主目录。而当用户输入命令时,PATH决定了shell在哪些目录下搜索该命令,同时还决定了搜索时的顺序。当shell启动之后,它再创建和(用默认值)初始化其他关键字变量。而对于其他变量,除非用户设置,否则它们都是不存在的。
用户在任何时候都可以更改大多数关键字shell变量的值,但通常没有必要修改系统初始化文件/etc/profile和/etc/csh.cshrc中初始化的关键字变量的值。如果需要修改bash关键字变量的值,就在初始化文件中进行修改。用户可以将用户创建的变量变成全局变量,同样,可以将关键字变量变成全局变量,这个工作一般在初始化文件中自动完成。用户还可以将关键字变量变为只读。
位置参数和特殊参数 有一组参数的名字并不像变量名。其中,大多数参数的名字都只由一个字符组成(比如1、?和#等),并且像其他所有变量一样,在引用它们时一般在其名字前面加上美元符号(如$1、$?和$#)。这些参数的值反映了用户与shell交互的不同方面。
无论何时,用户输入的一行命令中的每个参数都将成为位置参数的值。用户使用位置参数可以访问命令行参数,在编写shell脚本时将用到这项功能。内置命令set可以用来对位置参数赋值。
其他经常需要用到的shell脚本值,比如最后一次执行的命令名、命令行参数的个数以及最近执行命令的状态等,这些值均保存在特殊参数中。用户不能对特殊参数赋值。
| 回书目 上一节 下一节 |