bash变量(variable)

所谓变量,就是利用一个特定的“名称“(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输出处理之后,变量A就能成为一个环境变量供其后的命令使用。

在使用export的时候,别忘记shell在命令行对变量的“替换“(substitution)处理,

比方说

        $ A=B
        $ B=C
        $ export $A

上面的命令并未将A输出为环境变量,而是将B作输出。


*取消变量*

要取消一个变量,在bash中可以使用unset命令來处理:

        unset A

与export一样,unset命令行也同样会作变量替换(这其实就是shell的功能之一),

因此:

        $ A=B
        $ B=C
        $ unset $A

事实上所取消的变量是B而不是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不变



你可能感兴趣的:(shell13问,bash,shell,command,null,c,存储)