首页 > 解决方案 > bash shell函数返回无法解释的变量

问题描述

有一个简单的 bash shell 片段

function gettop()
{

 abc= /bin/pwd

}

funret=$(gettop)
echo $funret

funret的输出是命令/bin/pwd的输出:

/home/xxx/xxx

这是怎么发生的?

根据 shell 标准,函数返回带有echoreturn,但这里不涉及这些;但结果显示getopt 返回/bin/pwd并且 $() 只是运行此命令。

另一件事是,在我删除abc=之后的额外空白空间后 ,输出将变为空;

这里到底发生了什么?

标签: bashfunctionshell

解决方案


输出即/home/xxx/xxx 是预期行为,因为在shell 中分配的变量中没有空格,即abc=/bin/pwd。现在,由于您已经使用空格定义了变量,因此 shell 尝试在函数期间执行空格之后的字符串,并且输出 /home/xxx/xxx 是因为 /bin/pwd 是 shell 的已知命令。

如果您使用下面的代码片段,它会引发错误。

function gettop()
 {
abc= testing
}
funret=$(gettop)
echo $funret

错误:

./tmp.sh:第 5 行:测试:找不到命令


推荐阅读