linux上的bash字典是什么?如何使用它们?

Bash字典在Linux shell脚本中为您提供哈希映射和关联数组。我们将向您展示如何在自己的Linux shell脚本中使用这些强大而有用的数据结构。...

Bash字典在Linux shell脚本中为您提供哈希映射和关联数组。我们将向您展示如何在自己的Linux shell脚本中使用这些强大而有用的数据结构。

其他名字的玫瑰

What Is the Bash Shell, and Why Is It So Important to Linux?

RELATEDWhat Is the Bash Shell, and Why Is It So Important to Linux?

The formal name for dictionaries is associative arrays. They’re also called hash tables and hash maps. They’re a data structure that functi*** similarly to a regular array, but with a significant difference.

数组是保存在一个数据结构中的数据值的集合。要访问任何被称为数组元素的数据值,您需要知道它们在数组中的位置。数组元素在数组中的位置称为其索引,因此这些类型的数组称为索引数组。它们是最常用的数组类型。

然而,它们确实有一个缺点。如果不知道数组元素在列表中的位置,如何访问它?您需要遍历数组中的所有元素,测试该位置的值是否是您要查找的值。

关联数组克服了这个问题。它们不使用整数来唯一地标识数组元素。他们使用独特的词,称为关键字。无论数组元素在数组中的位置如何,都可以使用其关键字来检索数组元素的值。对于索引数组,表示数组中位置的整数按升序排列。关联数组中的关键字可以是任意顺序。

通过使用关键字搜索,可以在关联数组中查找值。查找一个单词并检索它的相关值就好像在字典中查找一个单词并找到它的意义一样。这就是为什么关联数组被称为字典。

bash 4.0或更高版本

bashshell4.0或更高版本支持关联数组。如果您使用的是当前的Linux发行版,那么就可以了。要检查Bash版本,请使用以下命令:

bash --version

linux上的bash字典是什么?如何使用它们?

Advertisement

用于研究本文的机器已经安装了bash5.1.4,所以我们可以开始了。

基本原则

为了在终端命令行或脚本中创建关联数组,我们使用Bash declare命令。-A(associative)选项告诉Bash这将是一个关联数组而不是索引数组。

declare -A acronyms

linux上的bash字典是什么?如何使用它们?

这将创建一个名为“acronyms”的关联数组

要将一些数据放入数组中,我们需要提供关键字和值。我们可以使用以下格式:

array-name[key]=Value

让我们添加一些数组元素:

acronyms[ACK]=Acknowledgement acronyms[BGP]="Border Gateway Protocol" acronyms[CIDR]="Classless Inter-Domain Routing" acronyms[DHCP]="Dynamic Host Configuration Protocol" acronyms[EOF]="End of Frame"

linux上的bash字典是什么?如何使用它们?

这些命令定义了五个数组元素。请注意,如果值中有空格,则这些值用引号括起来。我们的关键字是按字母顺序输入的,但它们可以按您喜欢的任何顺序输入。关键字必须是唯一的。如果尝试使用相同的关键字创建两个条目,则输入的第二个值将覆盖第一个值。您仍然只有一个关键字条目,它将与您添加的第二个值相关联。

要从数组中检索值,我们使用以下格式的命令:

${array-name[key]}

Advertisement

我们可以使用echo将输出发送到终端窗口:

echo ${acronyms[ACK]} echo ${acronyms[DHCP]}

linux上的bash字典是什么?如何使用它们?

使用循环

数组很好地用于循环中。关联数组也不例外。循环提供了有效的方法来调用一系列操作,而不需要重复的代码部分。在我们查看循环之前,有一种高效的方法来声明数组。

我们使用declare命令创建数组(与前面的-A选项相同),但是我们在命令行上以列表的形式提供关键字和值。

declare -A countries=( [ALB]=Albania [BHR]=Bahrain [CMR]=Cameroon [DNK]=Denmark [EGY]=Egypt )

数组名是“countries”,它通过等号“=”连接到值列表。值列表用括号“()”括起来,每个关键字用括号“[]”括起来。请注意,值之间没有逗号分隔。如果您有一个包含空格的值字符串,则需要用引号将其括起来。

linux上的bash字典是什么?如何使用它们?

若要使关联数组返回关键字而不是值,请添加感叹号“!”在数组名称前面。at符号“@”可用作通配符,表示所有数组元素。

此for循环将列出所有关键字:

for key in "${!countries[@]}"; do echo $key; done

linux上的bash字典是什么?如何使用它们?

请注意,关键字不一定按创建顺序列出,但这并不重要。关联数组不依赖于有序索引。

Advertisement

我们也可以使用参数展开来列出所有关键字。它们将列在一行上,而不是每行一个。

echo "${!countries[@]}" echo "${!acronyms[@]}"

linux上的bash字典是什么?如何使用它们?

我们可以扩展for循环,同时打印关键字和值。

for key in "${!acronyms[@]}"; do echo "$key - ${acronyms[$key]}"; done

linux上的bash字典是什么?如何使用它们?

如果我们想知道数组中有多少个元素,可以在数组名前面使用一个哈希“#”,而不是感叹号。

echo "${!countries[@]}" echo "${!acronyms[@]}"

linux上的bash字典是什么?如何使用它们?

检查数组元素是否存在

如果搜索关键字但没有这样的数组元素,则返回值将是空字符串。有时,为数组元素的存在或不存在指定一个不同的指示符是很有用的。

我们可以使用“+”操作符检查数组元素的存在。请注意,这是在关键字之后,而不是像前面看到的操作符那样在数组名称前面。

if [ ${acronyms[EOF]+_} ]; then echo "Found"; else echo "Not found"; fi if [ ${acronyms[FTP]+_} ]; then echo "Found"; else echo "Not found"; fi

linux上的bash字典是什么?如何使用它们?

在数组中找到关键字为“EOF”的数组元素,但找不到关键字为“FTP”的数组元素。

添加数组元素

向关联数组添加新元素很容易。与某些编程语言不同,声明数组时不需要定义数组的大小。您可以不断添加新元素,而不会达到预定义的上限。

Advertisement

要向数组中添加新元素,我们使用“+=”操作符。

countries+=( [FJI]=Fiji ) echo "$(#countries[@]}" echo ${countries[FJI]}

linux上的bash字典是什么?如何使用它们?

数组中的元素数现在是6,搜索new关键字将找到数组元素并返回其值。

删除数组元素和数组

unset命令用于删除数组元素。如果关键字中有空格,请用引号将其括起来。

unset acronyms[EOF] if [ ${acronyms[EOF]+_} ]; then echo "Found"; else echo "Not found"; fi

linux上的bash字典是什么?如何使用它们?

要删除整个数组,请将unset与数组的名称一起使用。

unset countries

linux上的bash字典是什么?如何使用它们?

对数组使用变量

将变量与关联数组一起使用很简单。在本例中,我们将为字符串“EOF”设置一个变量键。我们将在向数组中添加新的数组元素时使用该变量。实际上,我们正在替换前面删除的数组元素。

我们将使用new关键字调用新的数组元素,并使用变量来检索它。如果关键字包含空格,则需要将变量名用引号括起来。

key=EOF acronyms[$key]="End of Frame" echo ${acronyms[EOF]} echo ${acronyms[$key]}

linux上的bash字典是什么?如何使用它们?

发挥创造力

我们的例子是每个数组元素独立于其他所有元素的信息集合,很像字典。每一个都是一个独特的定义。但关联数组同样可以轻松地保存与一件事相关的各种信息,例如不同计算机硬件的规格:

declare -A specification specification[CPU]="Dual Core AMD Ryzen 5 3600" specification[Speed]="3600 MHz" specification[Kernel]="5.11.0-17-generic x86_64" specification[Mem]="1978.5 MiB" specification[Storage]="32 GiB" specification[Shell]="Bash" echo ${specification[CPU]}

linux上的bash字典是什么?如何使用它们?

有效地用一种语言写作意味着了解它所提供的机制和结构,并为你要解决的问题选择最合适的机制和结构。关联数组提供了一种易于使用的存储数据的方法,可以按名称进行搜索,就像字典一样。

  • 发表于 2021-07-14 11:29
  • 阅读 ( 139 )
  • 分类:互联网

你可能感兴趣的文章

2021年面向开发者、云工程师和devops的5大linux课程

... 与Udemy上的其他Linux课程不同,您不会被迫只记住命令,但Ziyad将亲自解释为什么某个特定命令是这样的。 ...

  • 发布于 2021-03-11 10:29
  • 阅读 ( 245 )

顶级网站和书籍,让您成为linux命令行英雄

... 什么是命令行(the command line)? ...

  • 发布于 2021-03-14 07:04
  • 阅读 ( 243 )

如何在linux上安装和使用powershell

...Linux和macOS安装程序。由于系统管理员经常使用Linux,Linux上的PowerShell带来了很多新功能。虽然它本质上是同一个程序,但是有一些关键的区别,比如在Linux PowerShell中运行标准Bash命令的能力。 ...

  • 发布于 2021-03-16 02:34
  • 阅读 ( 303 )

Windows10中LinuxBashShell快速指南

...微软宣布了令人敬畏的Canonical partnership。被吹捧为Windows上的Linux,开发人员对Bash应用于Windows的前景感到高兴。windows10周年更新承诺将把bash的全部功能引入Windows,而不是虚拟机。 ...

  • 发布于 2021-03-17 01:06
  • 阅读 ( 189 )

如何在windows10上获得linux bash shell

...就可以在命令行模式下运行Linux。这使您可以访问Windows PC上的bash shell! ...

  • 发布于 2021-03-21 11:48
  • 阅读 ( 281 )

在linux中,“bash”是什么意思?

...终端仿真器绝对是两个不同的应用程序。那么Bash到底是什么呢?在这篇短文中,我们将探讨Bash是什么,它做什么,以及如何开始使用它。 ...

  • 发布于 2021-03-28 13:14
  • 阅读 ( 449 )

如何使用受限shell来限制linux用户可以做什么

受限的shell限制了用户帐户在Linux上可以做什么。受限用户不能更改其目录,您可以控制他们可以访问哪些命令。下面介绍如何在Linux上设置受限shell。 受限炮弹 受限shell不是另一个shell。这是标准外壳的另一种模式。Bash、Kor...

  • 发布于 2021-03-31 10:57
  • 阅读 ( 383 )

如何在linux上的bash中设置环境变量

Linux上有多种类型的环境变量。了解如何查看它们,为本地和远程登录创建它们,并使它们在重新启动后仍然有效。 环境变量的工作原理 启动终端窗口及其内部的shell时,会引用一组变量,以确保shell配置正确。这些变量还确...

  • 发布于 2021-04-02 06:44
  • 阅读 ( 218 )

linux下如何使用which命令

...从终端窗口运行程序或命令时,shell(通常是现代发行版上的Bash)必须找到该命令并启动它。有些命令(如cd、history和pwd)是内置在shell中的,因此Bash不必费劲地查找这些命令。 但是Bash如何定位其他命令、程序和外部独立二进...

  • 发布于 2021-04-02 20:07
  • 阅读 ( 166 )

如何在linux上使用chroot命令

...人员工作但不为其他人工作的新软件使用的是开发人员PC上的资源,而该资源尚未包含在软件的测试版本中。chroot允许开发人员在他们的计算机上有一个简单的香草俘虏环境,他们可以在将软件提供给PV之前将其浸入其中。可以...

  • 发布于 2021-04-03 03:19
  • 阅读 ( 193 )
喵爱啊
喵爱啊

0 篇文章

相关推荐