在 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 变量将结果字符串拆分为单个元素。
相关文章
在 Bash 中运行 find -exec 命令
发布时间:2024/03/14 浏览次数:127 分类:操作系统
-
本文将演示如何使用 find 命令的 -exec 参数来使用 find 命令定位文件中的任何文本。