是否有可能创建类似于匿名函数的东西,其值可以分配给数组元素然后调用?我似乎无法在bash脚本中找到一种方法,但也许有一种解决方法.
Ign*_*ams 57
简答:不.
答案很长:Nooooooooooooo.
完整的答案:在bash函数不是第一类对象,所以不可能有这样的事情在bash匿名函数.
小智 10
有可能的; 我写了一个库来完成这个,虽然这是一个非常奇怪的项目.源代码可从http://github.com/spencertipping/bash-lambda获得.使用这个库:
$ my_array=()
$ my_array[0]=$(fn x 'echo $((x + 1))')
$ my_array[1]=$(fn x 'echo $((x + 2))')
$ ${my_array[0]} 5
6
$ ${my_array[1]} 5
7
$
Run Code Online (Sandbox Code Playgroud)
诀窍是让fn函数创建一个包含函数体,chmod +x该文件的文件,然后返回其名称.这会导致杂散文件累积,这就是库也实现异步标记/清除垃圾收集器的原因.
如果您确实需要数组来存储函数,则可以定义命名函数并仅存储它们的名称.然后,您可以将该函数调用为${array[n]}.或者,你可以命名他们func1.. funcN然后只是打电话func$n.
常用技术是有条件地分配函数定义:
#!/bin/sh
case $1 in
a) foo() { echo case a; };;
b) foo() { echo case b; };;
*) foo() { echo default; } ;;
esac
foo