shell - 变量
在C、C++这些强类型语言中,定义变量时必须显示声明变量的类型(比如int、char)。并且当定义一个变量时,会为该变量在内存中分配空间,并且进行初始化,比如
这条语句定义了变量i,并且在内存中为i分配了int大小(一般为4个字节)的空间,并且该内存空间会随机初始化为某个值。
我们还可以为变量i重新赋值,比如
该语句会把变量i的内存空间赋值为1的二进制。
定义变量
在shell语言中,要弄清楚两个概念:变量和对象。变量是没有类型的,类型是对象的,或者说变量的类型是其指向对象的类型。 比如定义变量var1:
变量var1是没有类型的,对象“value1”是一个字符串类型的对象。我们可以把变量var1看作是对象“value1”的一个引用。既然是引用,那么我们可以让一个变量重新指向别的对象,比如
var2一开始指向对象"value2",然后指向对象3, "value2" 和 3 是实际存在的两个不同的对象,而且是不同类型的两个对象。
注意:
变量名、等号、对象之间不能有空格
定义变量可以让其指向空对象,比如
变量的命名须遵循如下规则:
命名只能使用英文字母(大小写敏感),数字和下划线
首个字符不能以数字开头
不能使用bash里的关键字(可用help命令查看保留关键字)
使用变量
使用一个定义过的变量,只要在变量名前面加美元符号即可,如:
变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:
如果不给skill变量加花括号,写成echo "I am good at $skillScript",解释器就会把$skillScript当成一个变量(该变量不存在,输出为空),代码执行结果就不是我们期望的样子了。
推荐给所有变量加上花括号,这是个好的编程习惯。
只读变量
使用 readonly 命令可以将变量设置为只读变量,变量只读后就不能重新指向其它对象。下面的例子尝试更改只读变量,结果报错:
执行脚本,报错如下:
删除变量
使用 unset 命令可以删除变量,语法:
所谓删除变量可以理解为undefine变量,即去掉变量的定义。那么,当删除变量后,该变量就不存在。比如,如下脚本将没有任何输出。
unset 命令不能删除只读变量。
Last updated
Was this helpful?