Shell变量shell是弱类型语言,原则上,不是特别强调shell变量,或者shell变量可以放很多常见内容,这点和传统的C/C++有很大不同。shell变量也不需要提前定义,或者不牵扯到定义一说,需要时直接使用即可。
- shell的赋值和命名规则
myval="hello world"
注意:变量名和等号之间不能有空格。
如果变量名和等号之间出现了空格,就会被shell解释成命令和命令行参数。
变量名的命名需遵循如下规则:
(1)命名只能使用字母、数字和下划线,并且首个字符必须为字母;
(2)中间不能有空格,可以使用下划线;
(3)不能使用标点符号;
(4)不能使用bash中的关键字(可以用help命令查看保留关键字)。
另外,shell变量可以放入很多内容:
mystr="hello world"
myint=100
myfloat=3.14
mychar=c
所有的变量都不需要先定义后使用,而是直接使用即可。
使用一个赋值过的变量,只需在变量名之前加上 $ 符号即可:
echo $mystr
echo $myint
echo $myfloat
echo $mychar
运行程序,即可将变量的值输出到屏幕上。
有时候,我们会遇到这样的问题:
我们原本是想输出字符串“one worldone dream”,但是实际上呢?
我们可以看到,实际上只输出了一部分。原因就是Shell将mystrone当成了一个新的变量,由于该变量还未被使用过,所以输出的是空字符串。
那么我们如何解决这种问题呢?在Shell中,正确的字符串拼接方法是怎样的呢?
变量名外面的花括号是可选的,加不加都可以,加花括号是为了帮助解释器识别变量的边界。所以我们推荐给所有的变量加上花括号,尤其是这种类型的字符串拼接时。这是一个好的编程习惯。
我们再运行程序,就可以得到理想的结果:
已经定义过的变量,可以被重新定义。比如:
这样写是合法的,我们运行代码,就可以得到与预期相同的结果:
当我们定义了一个值,并且不希望这个值再被修改时,应该怎么做呢?可以使用readonly命令,将变量定义为只读变量。只读变量的值不能被改变。
我们继续沿用上面这个例子,稍作修改:
我们将mystr这个变量设置为只读变量,然后尝试对其重新定义,这时就会报错,提示我们mystr是一个只读变量,它的值不能被改变。
使用unset命令可以删除变量:
被删除的变量,内容会被清空。所以我们可以看到,当我们删除mystr这个变量后再将其显示到显示器上时,输出的就是一个空字符串。一般不再被使用的变量需要unset。
但是,unset命令不能删除只读变量:
这个原因,就是我们上面说的,只读变量的值不能被改变。所以我们不能用unset去删除只读变量。