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"