我想调用函数“B”并传递另一个函数名称(A1,A2等),它将从中调用。在这个函数中,传递了哪个名称,我初始化了几个变量,但我无法从“B”函数中读取它们。
function A1
{
echo "func 1"
result1="a1"
return 0
}
function A2
{
echo "func 2"
anotherResult="a2"
#..some other initialization
return 0
}
#...
function B
{
output=`$1` # $1 - function name
echo output=$output
echo result1=$result1 # <--- ERROR! result1 is empty!
}
B "A1" # main script runs function B and passes other function name
答案 0 :(得分:4)
您的功能B不会拨打A1。
请注意,output=$($1)
将无法满足您的期望,因为$(...)
内运行的任何内容都将在不同的进程中执行,并且当该进程终止时,您设置的值将无法访问不再。
所以:
function B
{
output=\`$1\` # <-- this will not call the $1 but will only print it
output=`$1` # <-- ( $($1) is a better style ) - will call whatever
# inside $1, but in another process
$1 # <-- here is the missing call in the current process.
...
}
您可以使用重定向,例如A1 > tmpfile
文件或命名管道,通过文件系统获取输出,同时保持当前进程的副作用:
function B
{
$1 > tempfile
read output < tempfile
echo output=$output
echo result1=$result1
}
将按预期执行,但会在您的文件系统上使用tempfile
。