shell 变量
变量基础
在 Bash shell 中,每一个变量的值都是字符串,变量赋值时,值都会以字符串的形式存储。也就是说,Bash shell 在默认情况下不会区分变量类型,即使你将整数和小数赋值给变量,它们也会被视为字符串 。
变量名
命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
中间不能有空格,可以使用下划线(_)。
不能使用标点符号。
不能使用bash里的关键字(可用help命令查看保留关键字)。
除了显式地直接赋值,还可以用语句给变量赋值
使用变量
使用一个定义过的变量,只要在变量名前面加美元符号$即可
推荐给所有变量加上花括号{ },这是个良好的编程习惯。
例:
修改变量值
第二次对变量赋值时不能在变量名前加,只有在使用变量时才能加 ,只有在使用变量时才能加,只有在使用变量时才能加
例:
单引号和双引号的区别
定义变量时,变量的值可以由单引号' '包围,也可以由双引号" "包围
例:
以单引号' '包围变量的值时,单引号里面是什么就输出什么,即使内容中有变量和命令(命令需要反引起来)也会把它们原样输出。这种方式比较适合定义显示纯字符串的情况,即不希望解析变量、命令等的场景。
以双引号" "包围变量的值时,输出时会先解析里面的变量和命令,而不是把双引号中的变量名和命令原样输出。这种方式比较适合字符串中附带有变量和命令并且想将其解析后再输出的变量定义。
只读变量
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
变量作用域Scope
Shell变量的作用域(Scope),就是 Shell 变量的有效范围(可以使用的范围)。
Shell 变量的作用域可以分为三种:
有的变量只能在函数内部使用,这叫做局部变量(local variable);
有的变量可以在当前 Shell 进程中使用,这叫做全局变量(global variable);
而有的变量还可以在子进程中使用,这叫做环境变量(environment variable)。
export a这种形式是在定义变量 a 以后再将它导出为环境变量,如果想在定义的同时导出为环境变量,可以写作export a=20。
环境变量也是临时的
创建一个新的Shell窗口时,在次访问该环境变量依旧访问不到。
通过 export 导出的环境变量只对当前 Shell 进程以及所有的子进程有效,如果最顶层的父进程被关闭了,那么环境变量也就随之消失了,其它的进程也就无法使用了,所以说环境变量也是临时的。
命令替换
Shell命令替换是指将命令的输出结果赋值给某个变量。比如,在某个目录中输入 ls 命令可查看当前目录中所有的文件,但如何将输出内容存入某个变量中呢?这就需要使用命令替换了,这也是 Shell 编程中使用非常频繁的功能。
替换方式
Shell 中有两种方式可以完成命令替换,一种是反引号,一种是$()
示例