如何从bash函数中返回数组

23 浏览
0 Comments

如何从bash函数中返回数组

我想从bash函数中返回一个数组,并在另一个函数中使用这个数组。但是我得到的是一个字符串,而不是一个数组,你能帮我解决如何从bash函数中返回一个数组的问题吗?我在bash脚本中是新手,谢谢。

array(){
          local words=("a a" "b b" "c c")
           echo ${words[@]}
    }
    getWord(){
           words=$(array)
           for word in "${words[@]}"; do
                echo "$word"
            done
    }
    getWord

它返回了字符串 a a b b c c,但是我的预期结果应该是一个数组。

0
0 Comments

如何从bash函数返回数组

在这段代码中,我们可以看到函数array()中定义了一个局部变量words,然后通过echo语句返回了数组的值。然而,我们无法直接从函数中返回一个数组,所以需要找到一种解决方法。

解决方法如下:

1. 使用全局变量

实际上,在这个代码中,我们不需要返回任何东西;"words"变量是全局的,因此可以在整个脚本中使用。这是一种解决方法,但是使用全局变量可能会引起其他问题,不是一种推荐的解决方法。

2. 使用IFS分隔符

第一个编辑的解决方法是在函数array()中设置IFS变量为逗号(或其他你想要的分隔符),然后使用"${words[*]}"将数组元素连接成一个字符串返回。在函数getWord()中,我们使用$(array)来获取返回的字符串,并通过设置IFS变量为原始值来恢复分隔符。然后,我们使用for循环遍历字符串,并输出每个单词。这种方法可以解决返回数组的问题,但是需要注意IFS变量的使用。

3. 使用特殊字符作为分隔符

第二个编辑的解决方法是将特殊字符(如"\ca")作为分隔符。这样可以避免使用逗号作为分隔符可能引起的问题。其他步骤与第二种方法相同。

在bash中,没有直接返回数组的方法。为了解决这个问题,我们可以使用全局变量、设置IFS分隔符或使用特殊字符作为分隔符。这些方法在不同的情况下可能会有不同的适用性,我们可以根据实际需要选择合适的解决方法。

0