Используйте функцию в другой функции в оболочке - PullRequest
0 голосов
/ 21 сентября 2011
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
}

Я не знаю, как я могу использовать функцию «Тип» в «Типах».Я попытался "arg2 = $ (Type $ arg1)", но это, кажется, не работает.Какой правильный синтаксис, пожалуйста?

Ответы [ 2 ]

1 голос
/ 21 сентября 2011

Если вы хотите использовать функцию с $(Type ...), то вы можете изменить операторы return ... на echo ... (не exec echo ..., что делает что-то еще). Если вы хотите сохранить операторы return ... в Type(), вам нужно сделать что-то вроде Type ...; arg2=$?, чтобы проверить код возврата из Type().

1 голос
/ 21 сентября 2011
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

Однако, если вам нужно вернуть массив, вы должны использовать глобальную переменную.Вы можете обратиться к Сложным функциям и Сложностям функций раздела Расширенное руководство по написанию сценариев для примеров этого метода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...