所谓变量,就是利用一个特定的“名称“(name)來存取一段可以变化的“值“(value)。
*设定(set)*
在bash中,可以用“=”來设定或宠幸定义变量的内容:
name=value
在设定变量的时候,得遵守如下规则:
*等号左右两边不能使用区隔符号(IFS),也应避免使用shell的保留字元(meta charactor)。
*变量名称不能使用$符号
*变量名称的第一个字母不能是数字(number)。
*变量名称长度不可超过256个字母。
*变量名称及变量值之大小写是有区别的(case sensitive)。
*变量替换(substitution)*
在命令行中使用者可以使用$符号夹上变量名称(除在用=号定义变量名称之外),将变量值替换出来,然后再重新组建命令行。
如:
$ A=ls
$ B=la
$ C=/tmp
$ $A -$B $C
必须强调的是,所提的变量替换,只发生在command line上面。
当在设定变量的时候,记住这点:
*用一个名称存储一个数值
此外,还可以利用命令行的变量替换能力來“扩充“(append)变量值
A=B:C:D
A=&A:E
上面的扩充范例,使用区隔符号(:)來达到目的的,
钥匙没有区隔符号的话,如下是有问题的:
A=BCD
A=$AE
因为第二次是将A的值集成$AE的替换结果,而非$A再加上E
要解决此问题,我们可以用更严谨的替换处理:
A=BCD
A=${A}E
上例中,使用{}将变量名称的范围给明确定义出来
*export*
严格来说,在当前shell中锁定一的变量,均属与“本地变量“(local variable)
只有经过export命令的“输出“处理,才能成为环境变量(environment variable)
例:
$ A=B
$ export A
$ export A=B
在使用export的时候,别忘记shell在命令行对变量的“替换“(substitution)处理,
比方说
$ A=B
$ B=C
$ export $A
*取消变量*
要取消一个变量,在bash中可以使用unset命令來处理:
unset A
因此:
$ A=B
$ B=C
$ unset $A
此外,变量一经unset取消之后,其结果是将整个变量拿掉而不仅是取消其变量值。
$ str= # 設為 null
$ var=${str=expr} # 定義 var
$ echo $var
$ echo $str
$ unset str # 取消
$ var=${str=expr} # 定義 var
$ echo $var
expr
$ echo $str
expr
var=${str=expr} 若unset str时则将expr赋值给str,若str为空值或具体值时,则${str=expr}的值为str的值
var=${str:=expr} 若str为unset或空值时将expr赋值给str,若str有具体值时,则${str:=expr}的值为str的值
var=${str-expr}若str为unset,则${str-expr}取expr,str不变;若str为空或有具体值,则${str-expr}取str的值,str不变
var=${str:-expr}若str为unset或空值,则${str:-expr}取expr,str不变;若str为具体值,则${str:-expr}取str值,str不变
var=${str+expr}若str为unset,则${str+expr}取str,str不变;若str为空值或具体值,则${str+expr}取expr,str不变
var=${str:+expr}若str为unset或空值,则${str:+expr}取str,str不变;若str为具体值,则${str:+expr}取expr,str不变