BASH将参数传递给函数';行不通

BASH将参数传递给函数';行不通,bash,function,shell,Bash,Function,Shell,我试图将一个参数传递给函数install(),但输出是“add”,而不是我的参数。 当我调用函数directory-install()时,我不知道如何只获取REP,因为我知道所有短语“adddirectory…” 您的install功能100%正常工作,问题是您正在将其传递为垃圾。垃圾进来,垃圾出去 真正的罪魁祸首是你的目录安装功能。执行REP=$(目录安装)时,变量REP现在包含从directory install输出的所有文本,而不仅仅是最后的echo$REP。这意味着添加目录或创建目录文本

我试图将一个参数传递给函数install(),但输出是“add”,而不是我的参数。 当我调用函数directory-install()时,我不知道如何只获取REP,因为我知道所有短语“adddirectory…”


您的
install
功能100%正常工作,问题是您正在将其传递为垃圾。垃圾进来,垃圾出去

真正的罪魁祸首是你的
目录安装
功能。执行
REP=$(目录安装)
时,变量
REP
现在包含从
directory install
输出的所有文本,而不仅仅是最后的
echo$REP
。这意味着
添加目录
创建目录
文本

如果希望
directory install
仅返回
REP
,则需要确保函数调用中没有其他输出。或者,您可以将非返回文本重定向到STDERR,在那里它将被显示,但不会被捕获

示例:

function badExample() {
    echo "Hello World"
    echo "ReturnText"
}

rtn=$(badExample)
# rtn now contains "Hello World\nReturnText"


function goodExample() {
    echo "Hello World" 1>&2
    echo "ReturnText"
}

rtn=$(goodExample)
# "Hello World" will appear on screen and rtn contains "ReturnText"

是您在
功能目录安装后遗漏的
()
问题吗?@DaveYarwood编辑我的问题也许我遗漏了什么。。。但是您实际上在哪里调用
安装
?(编辑:OP编辑了他们的代码)@Mr.Llama在scriptBash函数末尾应该是
f()
函数f
。但是如果我需要其他输出,我该怎么做?@Droïdeka-我编辑了响应。您可以将输出重定向到STDERR,它将显示在屏幕上,但不会在返回中捕获。
1>&2
的意思是“将STDOUT重定向到STDERR”。非常简单有效!真正的thx的解释,时间,和你的例子!
function badExample() {
    echo "Hello World"
    echo "ReturnText"
}

rtn=$(badExample)
# rtn now contains "Hello World\nReturnText"


function goodExample() {
    echo "Hello World" 1>&2
    echo "ReturnText"
}

rtn=$(goodExample)
# "Hello World" will appear on screen and rtn contains "ReturnText"