Bash Shell 变量

在Bash当中,当一个变量名称未被设置时,默认的内容是空的。

变量的设置规则:
1) 变量与变量内容以一个等号连接,等号两边不能接空格,注意,如果有空格则是逻辑比较
2) 变量名称只能是英文字母和数字,但开头不能是数字
3) 变量内容如含有空格,需要使用单引号或双引号括起来(如没有引号括起来,但是包含了转义,最终会转义输出),但双引号内特殊字符保持本性,单引号内的任何字符都是一般文本
4) 可以使用转义符将特殊字符变成一般字符
5) 如需要引用其它命令的结果,可以使用反单引号或$()语法,比如`uname –r`和$(uname -r)等同
6) 如要为变量增加内容,可以使用$变量名或${变量名}累加内容(不需要所谓的连接符)
7) 如变量需要在其它子进程中执行,需要以export来使变量变成环境变量:export PATH。
8) 通常大写字符为系统默认变量
9) 取消变量的方法是使用unset 变量名称

环境变量与自定义变量
在一个Shell中启用一个子Shell,子Shell中会继承父Shell的环境变量,但是自定义变量不会被继承(除非自定义的变量声明为环境变量)。
查看当前Shell中的环境变量,可以使用env命令。
查看当前Shell中的所有变量(包括环境变量),可以使用set命令。
命令set可以查看已经存在的Shell变量,以及设置Shell变量的新变量值(可改环境变量值),但是不能定义新的Shell变量。
命令declare用来定义自定义变量,如果需要把自定义变量变成环境变量,需要使用export变量名;如果需要直接声明一个环境变量,可以使用declare +x格式。
如果需要直接设置一个环境变量,可以使用export var=value格式。

自定义变量是指用户自己定义的变量,定义时可以声明它为环境变量(+x),也可以之后重新以declare +x格式变换成环境变量,或以export方式将其变为环境变量。
自定义变量不会因为它变成了环境变量而脱离它是自定义变量的事实。
变量变成环境变量后,可以set一个新值,可以unset,但是无法去掉环境变量标签(即:总是环境变量,也总是自定义变量)。

#查看环境变量
env

#查看环境变量和自定义变量
set

#查看自定义变量(不管定义是不是环境变量)
#export var=value,也是自定义变量
declare

#修改变量值(var必须先存着)
set var=value

#定义一个环境变量
export var=value

#定义一个自定义变量
declare var=value

#把自定义变量转换为环境变量
export var

#定义一个环境变量(或把变量变成环境变量)
declare -x var

#取消变量
unset var

当export一个变量,实际应该调用的是declare +x,所以export默认的输出是自定义变量变成环境变量的列表:

export
declare -x USER="root"
declare -x XDG_RUNTIME_DIR="/run/user/0"
declare -x XDG_SESSION_ID="2237"
declare -x var="value"

总之,用户自定义的变量,永远是自定义的,这个自定义的变量可以变换为环境变量(但是还是自定义的)。env查看环境变量,declare查看自定义变量(包括自定义变成环境变量的变量),set查看所有变量(环境变量和自定义变量的并集),export可以查看有哪些自定义变量升级为环境变量。 可以使用declare定义变量(+x声明为环境变量),export可以把变量转换为环境变量(实际是declare +x的使用),set对存在的变量设置新的值。一般使用declare定义一个自定义变量(或定义时指定值),export定义一个环境变量(或定义时指定值,export是declare的一种用法),用set来改变变量值。

如果一个变量同时出现在env和declare的输出结果中,说明这个变量是从自定义变量升级为环境变量的。如果只出现在env结果中,说明不是由自定义变量升级而来。

如下图:

特别用法:

#若指令返回值不等于0,则立即退出Shell
set -e