在bash数组元素中存储函数

Ant*_*nin 2 bash

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

我知道我可以这样做:

function array[5](){ echo "you are inside the function"; }
Run Code Online (Sandbox Code Playgroud)

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

不幸的是,该功能未列在数组的键中,因此,echo ${!array[*]}不会5作为键返回.

例如,以下代码:

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

只返回0 7.

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

gni*_*urf 6

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

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

# Execute it:
"${array[5]}"
Run Code Online (Sandbox Code Playgroud)

当你在做的时候

array[5]() { echo "you are inside the function"; }
Run Code Online (Sandbox Code Playgroud)

你正在定义一个array[5]你可以查看的函数declare -pf array[5].

有了这个机制,你可以做一些非常丑陋的事情:

array[5]() { echo "you are inside the function"; }
i=5
"array[$i]"
Run Code Online (Sandbox Code Playgroud)

这将执行该功能array[5].在任何情况下我都不会推荐这样的做法.