在bash数组元素中存储函数

时间:2014-11-11 16:40:06

标签: bash

如何将函数定义为数组元素?

我知道我可以这样做:

function array[5](){ echo "you are inside the function"; }

它是一个有效的函数,在某种意义上,指令array[5]正确执行函数。

运气不好,该功能未列在数组的键中,因此,echo ${!array[*]}不会将5作为键返回。

例如,以下代码:

array[0]="first"
function array[5](){ echo "you are inside the function"; }
array[7]="seventh"
echo ${!array[*]}

仅返回0 7

那么,我如何向数组元素添加一个函数,以便我可以循环它?

1 个答案:

答案 0 :(得分:6)

你无法将函数本身放在数组中。但你可以做的是将函数名称放在该字段中。看:

a_pretty_function() {
    echo "you're inside a function";
}
array[5]=a_pretty_function

# Execute it:
"${array[5]}"

当你在做什么

array[5]() { echo "you are inside the function"; }

您正在定义一个名为array[5]的函数,因为您可以使用declare -pf array[5]进行检查。

通过这种机制,你可以做一些非常难看的事情:

array[5]() { echo "you are inside the function"; }
i=5
"array[$i]"

这将执行函数array[5]。在任何情况下我都不会推荐这样的做法。