1

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

 1 year ago
source link: https://www.51cto.com/article/746179.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

作者:刘光录 2023-02-10 09:46:04
除了这种用法之外,针对变量还可以有其他的一些操作,比如在未设置变量时设置一个默认值,以及为单个变量分配多个值等。
116c486757ebfcfb44c592341c5a4df718a123.jpg

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

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK