Очень простая функция в Bash, показывающая возвращаемое значение - PullRequest
2 голосов
/ 08 декабря 2010

У меня есть несколько вопросов о Bash, я привык к современным языкам, и мне нужно разработать кое-что на Bash, но некоторые вещи не работают так, как я хочу.

У меня есть функция:

function is_directory
{
 if (test -d "$1"); then 
  return true
 fi
 return false
}

Я вызываю эту функцию, но я хочу отобразить результат на веб-странице (я работаю с CGI) ... так как мне отобразить возвращенные значения?

echo is_directory "/home/pepe"

не будет отображать true, он будет отображать "is_directory" / home / pepe "" как саму строку u.u

и как мне отобразить возвращаемые строки ??

Спасибо!

Ответы [ 2 ]

4 голосов
/ 08 декабря 2010

Bash и другие оболочки возвращают код выхода в виде целого числа в диапазоне 0-255.Использование return true или return false всегда приводит к ошибке, поскольку return ожидает числовое значение.Вы можете получить доступ к возвращаемому значению в специальной переменной $?.

$ foo () { return 42; }; foo; echo $?
42

. Вот несколько способов написать вашу функцию:

Возвращаем значение:

is_directory () {
    test -d "$1"
}

Чтобы использовать это:

if is_directory "foo"    # note that there are no parentheses or brackets
then
    echo "true"
else
    echo "false"
fi

Выведите строку:

is_directory () {
    if [ -d "$1" ]
    then
        echo "true"
    else
        echo "false"
    fi
}

Чтобы использовать это:

if [[ $(is_directory "foo") == true ]]
then
    do_something
fi

Используя эту последнюю версию функции, вы можетевыполните команду, показанную в вашем вопросе, следующим образом:

echo "$(is_directory "/home/pepe")"

, которая выдаст «true» или «false», но echo не требуется.Это будет делать то же самое:

is_directory "/home/pepe"
3 голосов
/ 08 декабря 2010

Лучший способ сделать это - echo получить нужный ответ в самой функции, например:

is_directory()
{
  [[ -d "$1" ]] && echo true || echo false
}

Вывод

$ is_directory /etc
true

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