BASH传递参数到函数不起作用

时间:2014-06-16 20:54:39

标签: bash function shell

我尝试将参数传递给函数install(),但输出为" add"而不是我的论点。 当我调用函数目录-install()时,我不知道如何获得REP,因为知道我有所有短语"添加目录...."

function install () {

    echo $1 #output not ok, show "add"

}


function directory-install () {

    read -p "enter directory " REP
    if cd $REP 2> /dev/null ; then
        echo -e "add directory '$REP'\n"
    else
        mkdir REP
        echo -e "creat directory \n"
    fi
    echo $REP
}


REP=$(directory-install)
echo $REP #output not ok too show "add directory..." but i just want the REP .
install $REP

1 个答案:

答案 0 :(得分:1)

您的install功能正常工作,问题在于您将垃圾传递给它。垃圾进,垃圾出。

真正的罪魁祸首是你的directory-install功能。当您执行REP=$(directory-install)时,变量REP现在包含来自directory-install所有文本输出,而不仅仅是最终echo $REP。这意味着add directorycreat directory文字。

如果您希望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"