在shell中的另一个函数中使用函数

时间:2011-09-21 18:32:14

标签: function shell

Type()
{
    if [ -d $1 ]
        then
            return 1
    elif [ -e $1 ]
        then
            return 2
    else
            return 0
    fi
}

Types()
{
    local arg1 arg2
    for arg1 in $@
        do
            arg2=$(Type $arg1)
            if [ arg2 -eq 1 ]
                then
                    echo "$arg1 est un répertoire."
            elif [ arg2 -eq 2 ]
                then
                    echo "$arg1 n est pas un répertoire."
            else
                    echo "$arg1 ne correspond à aucune entrée du répertoire."
            fi
    done
}

我不知道如何在'Types'中使用'Type'功能。我试过“arg2 = $(类型$ arg1)”bur它似乎不起作用。请问正确的语法是什么?

2 个答案:

答案 0 :(得分:1)

return 1

Bash函数通常通过标准输出返回值。例如,你可以改用这样的东西:

exec echo 1    # sends 1 to the standard output and then ends the function

或者,您可以返回0到255之间的整数作为退出代码(正如您尝试的那样)。如果您选择这样做,则需要执行以下操作:

Type $arg1
arg2=$?        # obtains exit code of last command/function executed

但是,如果需要返回数组,则必须使用全局变量。您可能需要参考高级Bash-Scripting Guide Complex Functions and Function Complexities部分,了解此方法的示例。

答案 1 :(得分:1)

如果您想将此功能与$(Type ...)一起使用,则可以将return ...语句更改为echo ...(不是exec echo ...,而其他功能也是如此)。如果您想将return ...语句保留在Type()中,则需要执行Type ...; arg2=$?之类的操作来测试Type()的返回代码。