在 Bash 中返回一个数组
由于 Bash 不处理数组,因此返回数组可能有点困难。 但是,通过使用全局变量或命令替换解决方法从函数返回数组来克服此限制是可行的。
本文将介绍命令替换,这是一种无需全局变量即可在 bash 中返回数组的方法。
命令替换
要了解这是如何工作的,我们首先需要了解命令替换是什么以及它在 Bash 中的工作方式。
称为命令替换的 Bash 功能允许使用命令的输出来代替命令本身。 这是通过将命令括在一对反引号 (``)
或 $()
中来完成的,如下所示:
echo "The current date is: `date`"
输出:
The current date is: Fri Nov 29 16:14:23 PST 2022
在上面的示例中执行了 date 命令,它的输出被替换为命令本身。 这允许我们将命令的输出直接嵌入到字符串中,这在许多情况下都很有用。
在 Bash 中使用命令替换返回数组
现在,让我们看看如何使用命令替换从 Bash 中的函数返回数组。
首先,让我们创建一个名为 get_array 的函数,它返回一个从 1 到 10 的数字数组并使用命令替换。 然后,调用该函数并将输出存储在我们将打印的变量 result 中。
function get_array() {
local my_array=(1 2 3 4 5 6 7 8 9 10)
echo "${my_array[@]}"
}
result=$(get_array)
echo "The result is: $result"
输出:
The result is: 1 2 3 4 5 6 7 8 9 10
在上面的函数中,我们创建了一个名为 my_array 的数组,其中包含从 1 到 10 的数字。然后我们使用 echo 打印该数组并将其括在引号中以确保数组元素保留为单个字符串。 之后,我们调用 get_array 函数并将其输出存储在结果变量中。 然后我们打印结果变量的内容,它应该是从 1 到 10 的数字数组。
在 Bash 中使用 IFS 返回数组
现在让我们看看如何获取数组的元素。 由于数组元素作为单个字符串返回,我们需要使用 IFS(内部字段分隔符)变量将字符串拆分为单个元素。
IFS 变量控制 bash 如何将字符串拆分为单词或标记。 默认情况下,IFS 设置为空格、制表符和换行符,这意味着 bash 将在这些字符中的任何一个处将字符串拆分为单词。
要将 get_array 函数返回的字符串拆分为单个元素,我们需要将 IFS 设置为空格字符:
IFS=' '
result=$(get_array)
result_array=($result)
for i in "${!result_array[@]}"; do
echo "Element $i: ${result_array[$i]}"
done
输出:
Element 0: 1
Element 1: 2
Element 2: 3
Element 3: 4
Element 4: 5
Element 5: 6
Element 6: 7
Element 7: 8
Element 8: 9
Element 9: 10
在上面的代码中,我们将 IFS 设置为一个空格字符,这允许我们将 get_array 函数返回的字符串拆分为单个元素。 然后我们将结果存储在 result_array 变量中,并使用 for 循环打印数组的元素。
现在让我们看看这个方法如何返回一个字符串数组而不是一个数字数组。
首先,让我们修改 get_array 函数以返回一个字符串数组:
function get_array() {
local my_array=("one" "two" "three" "four" "five" "six" "seven" "eight" "nine" "ten")
# Return the array using the command substitution
echo "${my_array[@]}"
}
在上面的函数中,我们创建了一个名为 my_array 的数组,其中包含字符串 1 到 10。 然后我们使用 echo 打印数组并将其括在引号中以确保数组元素保留为单个字符串。
现在让我们看看如何利用 get_array 函数返回字符串数组:
IFS=' '
result=$(get_array)
result_array=($result)
for i in "${!result_array[@]}"; do
echo "Element $i: ${result_array[$i]}"
done
输出:
Element 0: one
Element 1: two
Element 2: three
Element 3: four
Element 4: five
Element 5: six
Element 6: seven
Element 7: eight
Element 8: nine
Element 9: ten
在上面的代码中,我们调用了 get_array 函数并将其输出存储在结果变量中。 然后我们将字符串拆分为单独的元素并将它们存储在 result_array 变量中。
最后,我们使用 for 循环来打印数组的元素。
总之,在 bash 中返回一个数组可能很棘手,因为 bash 不支持数组。 但是,可以使用一种称为命令替换的方法来发挥作用。
这涉及将数组括在引号中并使用 echo 打印它,然后使用 IFS 变量将结果字符串拆分为单个元素。
相关文章
如何在 CentOS 中获取 IP 地址
发布时间:2023/05/04 浏览次数:109 分类:操作系统
-
这篇简短的文章是对 CentOS 的一个简短介绍,然后简要讨论了我们如何使用命令行界面 (CLI) 在 CentOS 中获取服务器 IP 地址。
在 Linux 中更新 YUM
发布时间:2023/05/04 浏览次数:86 分类:操作系统
-
本文介绍了 Linux 中的 yum update 命令。本文将教我们如何在 Linux 中更新 YUM,以及如何在 Linux 系统上安装、更新、删除、查找和管理包。
在 Linux 中安装 Deb 文件
发布时间:2023/05/04 浏览次数:133 分类:操作系统
-
本文介绍如何在 Linux 中安装 deb 文件。在这篇 Linux 文章中,我们将学习如何在 Linux 系统上安装 .deb(Debian 软件包)文件。 我们还将看到如何在安装后删除 .deb 文件。
Linux 中的 lsof 命令
发布时间:2023/05/04 浏览次数:84 分类:操作系统
-
在这篇 Linux 文章中,我们将了解 Linux 操作系统中的 lsof 命令。 我们将看到如何在 Linux 中将此命令用于不同目的。
Linux 解决不能执行二进制文件问题
发布时间:2023/05/04 浏览次数:350 分类:操作系统
-
在本文中,我们将学习如何在 Linux 中执行二进制文件。 如果 Linux 无法执行二进制文件,我们还将学习如何解决错误。
Linux 中错误 Mesg: Ttyname Failed: Inappropriate Ioctl for Device Error
发布时间:2023/05/04 浏览次数:145 分类:操作系统
-
本文介绍如何在 Linux 中解决 mesg: ttyname failed: inappropriate ioctl for device 错误。在 Linux 中,这个错误是由于默认的 vagrant 配置 config.ssh.shell 与 bash -l 交互导致的。
Linux 中的 ps aux 命令
发布时间:2023/05/04 浏览次数:75 分类:操作系统
-
本篇文章将讨论 Linux 中的 ps aux 命令。如果将 aux 快捷方式与 ps 命令一起使用,它将显示用户需要的最多信息,并可以为您提供系统运行进程的当前状态。
Linux 中的 NTP
发布时间:2023/05/04 浏览次数:137 分类:操作系统
-
本篇文章将讨论 Linux 中的 ntp。NTP 是大多数 IT 基础设施使用的核心协议。 使用它的目的是同步日期和时间信息。
在 Bash 中创建进度条
发布时间:2023/05/04 浏览次数:170 分类:操作系统
-
这是有关在 Bash 中创建进度条以显示正在运行的命令或进程的进度的指南。本文将探讨在 Bash(Linux 和 macOS 的默认 shell)中向 shell 脚本添加进度条的几种方法。使用 pv 命令在 Bash 中创建进度条