变量是一个很重要的概念,无论是bash脚本还是其他语言,都是如此。在bash中,创建变量很简单,给变量一个名称即可。默认情况下,变量的值为空。我们可以通过等号为变量赋值。需要注意的是,变量和变量的值不是一个概念。当给定变量一个名称后,例如myvar,我们需要通过$取得变量的值,即$myvar。使用echo输出变量的值。
输出变量的值的格式为:echo $myvar 或者 echo ${myvar}
使用变量的时候,需要注意以下几点:
1. 给变量赋值的时候,如果值包含空格,需要用单引号或者双引号包起来,否则会引起错误
2. 给变量赋值的时候,如果使用单引号,那么单引号里面的变量就不会解析成真正的值。使用双引号则可以
3. 可以将一个命令执行的结果赋给一个变量。格式为:myvar=$(command) 或者 `comand`。值得注意的是,务必要将$()和${}的用途分开
4. 变量的扩增,即将新的内容增加到变量原来的值上去。格式为"$变量名称" 或 ${变量} 扩增内容
5. 使用export将变量变成环境变量,使得bash子进程可以使用变量。请看下图:
6. 判断变量是否未设置,如果未设置则用-后面的内容赋值。语法为:var2=${var1-hellovar1}(若var1未设置,那么将hellovar1赋值给var2,否则将var1的值赋给var2)。需要注意的是,如果var1设置为空值了,那么也算是赋值了
7. 判断变量是否未设置或者设置为空值,如果未设置或者设置为空值则用-后面的内容赋值。语法为:var2=${var1:-hellovar1}。如下图,注意与第六点区分开
关于第6、7的更多用法与规则,参考下表(出自鸟哥Linux私房菜:http://vbird.dic.ksu.edu.tw/linux_basic/0320bash_2.php):
变量配置方式 | str 没有配置 | str 为空字符串 | str 已配置非为空字符串 |
var=${str-expr} | var=expr | var= | var=$str |
var=${str:-expr} | var=expr | var=expr | var=$str |
var=${str+expr} | var= | var=expr | var=expr |
var=${str:+expr} | var= | var= | var=expr |
var=${str=expr} | str=expr var=expr |
str 不变 var= |
str 不变 var=$str |
var=${str:=expr} | str=expr var=expr |
str=expr var=expr |
str 不变 var=$str |
var=${str?expr} | expr 输出至 stderr | var= | var=$str |
var=${str:?expr} | expr 输出至 stderr | expr 输出至 stderr | var=$str |