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