如何将函数定义为数组元素?
我知道我可以这样做:
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
。
那么,我如何向数组元素添加一个函数,以便我可以循环它?
答案 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]
。在任何情况下我都不会推荐这样的做法。