具有不同名称的导出函数

具有不同名称的导出函数

我有一个脚本,它导出一个函数供子脚本使用,并且想根据条件更改导出的函数。我知道我可以在条件中声明两个不同的函数,但如果可能的话我宁愿避免这种情况。

所以一个例子是:

#!/bin/bash

foo () { echo foo; }
bar () { echo bar; }

if [[ $var == foo ]]; then
    #in this case my_func() should execute foo()
    export -f my_func
elif [[ $var == bar ]]; then
    #in this case my_func() should execute bar()
    export -f my_func
fi

我想我也可以my_func() { foo "$@"; }在导出之前创建一个简单的起始函数,就像在条件内部一样,但我询问是否有更好的方法来做到这一点。

答案1

这可能是您已经提议的,但我认为没有更好的方法。 shell 没有提供一种安全的内省方式来在 的声明中包含预先声明的实际声明foo或函数,我认为这是一种替代方法。如果您不愿意移动或的功能barmy_funcfoobar 进入 my_func(即,无需创建foobar作为单独的函数),那么我在这里展示的可能是最好的:

#!/bin/bash

foo () { echo foo; }
bar () { echo bar; }

case $var in
    foo) export -f foo; my_func () { foo "$@"; } ;;
    bar) export -f bar; my_func () { bar "$@"; } ;;
esac

export -f my_func

也就是说,根据 的值var,导出您正在使用的适当函数my_func并声明您的函数。然后将其导出。

相关内容