第七学时 变量
变量定义的方法
name = value
变量名 = 该变量所保持的值
FRIUT = apple
echo $FRIUT 返回FRIUT值
变量 标量
数组提高尼古拉一种将变量集合分组的方法。
数组变量和比阿亮之间的不同可作如下解释:激射读者想将数的所有学时作为一个变量集合,分开的每一学时就是一个标量。
创建数组变量的最简单方式
name[index] = value
name 数组名 index 数组中程序员设置的下标 valude 为该项附的值
$ FRUIT_0 = apple
$ FRUIT_1 = banana
$ FRUIT_2 = orange
或是
$ FRUIT[0] = apple
$ FRUIT[1] = banana
$ FRUIT[2] = orange
$ FRUIT[10] = plum
数组FRUIT中下标为10的哪一项被复制为"plum",这里要注意的是Shell并不为下标2~10之间的遗传空白数组项用空格填满,Shell只是跟踪那些赋了值的数组元素。
若定义的数组变量与某个一定义的标量同名,则标量值为数组下标为0的那个元素的值。
如: $FRUIT = applle == FRUIT[0] = apple
数组初始化的第二种凡是是一次设置多个原书,在ksh中,做法如下:
set -A name value1 value2...valuen
bash中是:
name =(value1...valuen)
$set -A band derri terry mike gene
$band =(derri terry mike gene)
等价于
$band[0] = derri
$band[1] = terry
$band[2] = mike
$band[3] = gene
bash中 当为多个数组原书赋值时,可以在值前面加上数组下标
myarray = ([0]=derri [3]=gene [2]=mike [1]=terry)
访问数组值
${name[index]}
$echo ${FRUIT[2]} --> orange
可用以下方法访问所有数组中的所有项:
${name[*]}
${name[@]}
$echo ${FRIUT[*]} --> apple banana orange
如果保留项中带有空格 如 passion fruit
则 FRIUT[3] = "passion fruit"
只读变量 通过使用readonly命令,Shell提供另一种将变量标记为只读的方式,当命令被标为制度时,他的值不可改变
$ FRUIT = kiwi
$ readonly FRUIT
echo $FRUIT
kiwi
$ FRUIT = cantaloupe 产生错误
删除变量
unset name name是欲删除变量的名称,如 unset FRUIT 删除变量FRUIT 不能用unset命令删除被标识为只读的变量
环境变量
shell运行时,存在三种变量 局部变量 环境变量 Shell变量
局部变量 是只在当前Shell实例中存在的变量,而由其他Shell启动的程序不能使用该变量。
环境变量 是Shell的任何子进程都能使用变量,许多程序要正确运行都需要使用环境变量
Shell变量 是Shell设置的特殊变量,也是Shell正确运行所必须的,这些变量有些是环境变量而有些是局部变量
比较局部 环境 Shell变量
属 性 局部变量 环境变量 Shell变量
可被子进程访问 No Yes Yes
由用户设置 Yes Yes No
由Shell设置 No No Yes
用户可更改 Yes Yes No
Shell要求使用 No No Yes
导出环境变量
可以通过导出将变量放入环境中
export name 该命令用制定的名称name标识要导出的变量。这是sh可以支持的唯一格式,导出环境变量的标准语法为:
name = value;export name
如 PATH = /sbin:/bin;export PATH 设置变量PATH的值并导出。为清除的表示该变量是环境变量,环境变量的赋值语句和导出语句写在同一行。
使用export 命令向环境导出多个变量
export PATH HOME UID
ksh和bash支持的第二种将变量导出的格式为
export name = value
name制定的变量赋值为value,然后将其导出 即 export PATH = /sbin:/bin
Shell变量
用户变量是用户可手工设置和重设的变量
shell变量 shell在初始化和使用过程中设置的变量