bash 脚本中关于变量的一些用法总结

系统 Linux
除了这种用法之外,针对变量还可以有其他的一些操作,比如在未设置变量时设置一个默认值,以及为单个变量分配多个值等。

我们先前写过关于 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}!"

由于变量 name 没有设置任何值,所以它会使用 nobody 作为默认值,所以上述脚本将会打印 "hello, nobody!"。

如果预先设置了变量值,当然会使用为其设置的值:​

name="tiap"
echo "hello ${name:-nobody}!"

其结果为 "hello, tiap!"

在已设置变量值时修改值

我们还可以设置变量以在设置变量时返回某个值。这将导致变量在设置时打印某个字符串,而在未设置时不打印任何字符串。其语法结构如下:

${variable:+string}

看下面的例子:

echo "hello ${name:+person}!"

由于变量 name 没有设置,所以它只会打印 "hello !"。

修改上面的脚本,为变量 name 设置一个值,它将不会使用为其设置的值,而是使用调用的时候提供的值:​

name="tiap"
echo "hello ${name:+person}!"

上述脚本的结果为 "hello person!"。

变量的间接引用

看下面的语法结构:

${!variable}

这个在功能上优点复杂,但是当你了解它的工作原理后,就很容易理解了,看下面的例子:​

name="tiap"
variable="name"
echo "hello ${!variable}!"

上述脚本将会打印 "hello tiap!"。

变量名前面的感叹号 ! 会替换变量名,然后在查找该变量名的相关变量值。

计算变量的长度

现在我们再来看如下语法结构:

${#variable}

它将会打印变量的长度,但是会根据变量是字符串还是数组而略有不同。

如果变量为字符串,那么将会返回字符串中字符的个数,如下所示:​

variable="name"
echo "${#variable}."

上述脚本的结果为 4

如果变量为数组,那么将会打印数组中元素的个数,看下面的例子,其结果将会打印 2:​

variable=("name" "word")
echo "${#variable}."

小写和大写字符串

要改变变量值的大小写,可以分别使用运算符 ^ ,如下所示:​

# 转为大写
${variable^}
${variable^^}
# 转为小写
${variable,}
${variable,,}

上述脚本中,一个运算符 ^ 和两个^^ 有什么区别呢?一个运算符(比如 ${variable^} )只会修改变量值中的第一个字母,而两个运算符的时候(比如 ${variable^^})会修改整个字符串。比如:​

variable="name"
echo "${variable^}"

结果将为:Name

而:

variable="name"
echo "${variable^^}"

其结果将会为:NAME

同样,小写转换符也是一样。下面脚本将会打印:wIDEname

variable="WIDEname"
echo "${variable,}"

而下面脚本将会打印:widename

variable="WIDEname"
echo "${variable,,}"
责任编辑:庞桂玉 来源: TIAP
相关推荐

2020-05-19 14:35:42

Shell脚本循环

2020-04-10 08:50:37

Shell脚本循环

2017-09-05 09:17:47

Java编程用法总结

2020-04-14 09:22:47

bash脚本技巧

2020-04-08 10:21:58

bash脚本语言

2020-09-28 06:45:42

故障复盘修复

2012-01-18 10:13:50

Objective-CiOSself

2009-09-21 17:46:25

Hibernate数据

2011-07-13 09:13:56

Android设计

2009-07-02 10:52:30

JavaBean规范

2019-10-15 06:00:26

Google AnalAngularReact

2013-04-07 10:40:55

前端框架前端

2009-06-18 09:51:25

Java继承

2022-11-09 19:02:10

Linux

2017-09-10 17:31:18

iOS渲染数据

2017-02-20 16:28:30

DCISDN-WAN传输网络

2011-11-28 15:57:26

MySQL数据库主从配置

2011-07-12 09:47:53

WebService

2009-06-22 15:36:00

如何学好java

2009-09-27 11:09:42

API设计
点赞
收藏

51CTO技术栈公众号