我们先前写过关于 bash 脚本中变量的用法。其一般使用方式为,使用一个变量存储一些数据,然后调用变量,如下所示:
除了上面这种用法之外,针对变量还可以有其他的一些操作,比如在未设置变量时设置一个默认值,以及为单个变量分配多个值等。
下面我们来详细看一下。
使用数组
数组在 bash 脚本中是经常会用到的一种数据类型。其定义方法为:
上述脚本,是在数组 name 中定义了两个变量,分别是 tiap 和 linux。
那么,如何访问这些值呢?
如果你运行 echo $name,会看到它只打印第一个值,tiap。访问其他的值需要使用另外的方式,即使用 ${variable[number]} 语法从数组变量中提取特定的值。如下所示:
上面脚本将打印 "hello, linux!"
与其他大多数编程语言类似,数组索引的顺序,是从 0 开始的。所以,访问第一个元素的方式为:
它与 echo "hello, $name!" 的结果是完全相同的,由此可见,访问数组的时候,其索引值 [number] 是可以省略的,当省略索引值的时候,取默认值 0。
索引仅表示项在数组中的位置,所以索引0是数组中的第一个元素。
未设置变量时使用默认值
当变量未按以下方式设置时,可以将变量默认设置为某个字符串:
看下面的例子:
由于变量 name 没有设置任何值,所以它会使用 nobody 作为默认值,所以上述脚本将会打印 "hello, nobody!"。
如果预先设置了变量值,当然会使用为其设置的值:
其结果为 "hello, tiap!"
在已设置变量值时修改值
我们还可以设置变量以在设置变量时返回某个值。这将导致变量在设置时打印某个字符串,而在未设置时不打印任何字符串。其语法结构如下:
看下面的例子:
由于变量 name 没有设置,所以它只会打印 "hello !"。
修改上面的脚本,为变量 name 设置一个值,它将不会使用为其设置的值,而是使用调用的时候提供的值:
上述脚本的结果为 "hello person!"。
变量的间接引用
看下面的语法结构:
这个在功能上优点复杂,但是当你了解它的工作原理后,就很容易理解了,看下面的例子:
上述脚本将会打印 "hello tiap!"。
变量名前面的感叹号 ! 会替换变量名,然后在查找该变量名的相关变量值。
计算变量的长度
现在我们再来看如下语法结构:
它将会打印变量的长度,但是会根据变量是字符串还是数组而略有不同。
如果变量为字符串,那么将会返回字符串中字符的个数,如下所示:
上述脚本的结果为 4。
如果变量为数组,那么将会打印数组中元素的个数,看下面的例子,其结果将会打印 2:
小写和大写字符串
要改变变量值的大小写,可以分别使用运算符 ^ 和,,如下所示:
上述脚本中,一个运算符 ^ 和两个^^ 有什么区别呢?一个运算符(比如 ${variable^} )只会修改变量值中的第一个字母,而两个运算符的时候(比如 ${variable^^})会修改整个字符串。比如:
结果将为:Name。
而:
其结果将会为:NAME。
同样,小写转换符也是一样。下面脚本将会打印:wIDEname
而下面脚本将会打印:widename