在 Bash 脚本中使用变量的不寻常方式

您可能知道 Bash shell 脚本中的变量。

与其他编程和脚本语言一样,您使用变量来存储数据,然后在以后的命令中引用它们。

name="Linux Handbook"
echo "Hello $name!"

它将打印“Hello Linux Handbook!”。

外面 example 在上面,您还可以对变量执行大量惊人的操作,例如在未设置变量时填充默认值,以及为单个变量分配多个值。

让我向您展示这些变量的不寻常和高级用法 bash 脚本。

使用数组

排除以上 example,在 Bash 中最常见的变量类型是数组:

name=("Linux Handbook" "It's FOSS")

以上 example 分配两者 Linux HandbookIt's FOSS 作为值 name 多变的。

但是,您如何访问每个值?

如果你跑 echo $name,你会看到它打印了第一个值, Linux Handbook. 要访问其他值,您需要对变量使用不同的语法。

要开始提取其他值,让我们从熟悉以下内容开始:

echo "Hello ${name}!"

这是允许您获取所有变量值的基础,也是允许您在本文其余部分执行与变量交互的其余方法的基础。

回到前面提到的 example你可以使用 ${variable[number]} 从变量中提取某个项目的语法:

echo "Hello ${name[1]}!"

这将打印“Hello It’s FOSS!”

如果你还不能从上面看到 example,数组中的第一项实际上从 0 而不是 1 开始。

所以要拉 Linux Handbook 值,您将在位置 0 拉项目:

echo "Hello ${name[0]}!"

同样,只需省略 [number] 部分只是使其默认为数组中的第一项(位于索引 0 处)。

索引仅表示该项目在数组中的位置。 同样,索引 0 是数组中的第 0 项。

这些构成了您在 Bash 中实际可以找到的所有变量类型。

现在让我们了解如何在调用这些变量时实际使用和修改这些变量的输出。

未设置变量时设置值

当变量未像这样设置时,您可以将变量默认设置回某个字符串:

${variable:-string}

拿着这个 example:

echo "Hello ${name:-nobody}!"

由于变量 name 未设置,默认为 nobody 上面的命令将打印“Hello nobody!”。

如果变量是预先设置的,它的值将被使用:

name="Linux Handbook"
echo "Hello ${name:-nobody}!"

上面的命令打印“Hello Linux Handbook!”

在已设置变量时设置值

也可以设置一个变量,当变量返回某个值时 放。 这将导致变量在设置时打印某个字符串,而在没有设置时不打印任何内容。

此方法的语法与前一种方法类似,但使用 + 签署而不是 -.

${variable:+string}

拿着这个 example 其中未设置变量名称。 因此它不会为该变量部分打印任何内容,并且命令的输出将是“Hello!”

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

修改上面的 example 并设置变量 name. 使用这种特殊方法,它不会使用已经设置的值,而是使用您提供的值。

name="Linux Handbook"
echo "Hello ${name:+person}!"

上面的命令将打印“Hello person!”。

您可能会发现更多使用案例 ${variable:-string} 语法,作为一些好处 ${variable:+string} 已经可以使用其他工具(例如测试)来完成([]) 操作员:

间接引用变量

下一个 example 将使用以下语法:

${!variable}

这个在它的功能上有点复杂,但是在你看到它是如何工作的之后才有意义:

name="Linux Handbook"
variable="name"

echo "Hello ${!variable}!"

它将打印“Hello Linux 手册”。

! 变量名之前的字符会导致替换正常的变量名,然后使用该字符串的名称来查找相关变量。

同样地:

  • variable 替换为字符串 name, 其次是:
  • name 被替换为它的值 Linux Handbook.

查找变量的长度

让我们使用以前的方法,但交换 ! 字符为 #

${#variable}

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

在 a 上使用该语法 细绳 将导致变量被替换为字符串中的字符数量。

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

它会打印 4。但另一方面,在 大批 将打印数组内的项目数,即数组大小,这里为2。

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

小写和大写字符串

最后,您可以使用大写和小写字符串 ^, 运营商分别。

您在变量名称的末尾提供这些,如下所示:

# Capitalizes
${variable^}
${variable^^}

# Lowercases
${variable,}
${variable,,}

提供一个和两个字符有什么区别?

只提供一个(即 ${variable^}) 将只修改第一个字母,同时提供两个 (${variable^^}) 将导致整个字符串被修改。

这 example 下面打印 Name 代替 name

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

但是这个打印 NAME

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

同样,您也可以以小写形式打印变量。

这 example 下面将打印 wIDEname

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

这个会打印 widename

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

总结

这些只是您可以在 Bash 中使用变量的一些方法。 您可以找到更多与内部变量交互的方法 Bash 关于变量扩展的文档.

对上述示例的工作方式有任何疑问,或者对某些工作不正常有任何疑问吗? 随时在下面的评论部分留下任何内容。