Я хочу вернуть значение из функции, вызываемой в сценарии оболочки. Возможно, мне не хватает синтаксиса. Я пробовал использовать глобальные переменные. Но это тоже не работает. Код такой:
lockdir="somedir"
test() {
retval=""
if mkdir "$lockdir"
then # Directory did not exist, but it was created successfully
echo >&2 "successfully acquired lock: $lockdir"
retval="true"
else
echo >&2 "cannot acquire lock, giving up on $lockdir"
retval="false"
fi
return retval
}
retval=test()
if [ "$retval" == "true" ]
then
echo "directory not created"
else
echo "directory already created"
fi
shell
return-value
Мридул Вишал
источник
источник
Ответы:
Функция Bash не может возвращать строку так, как вы этого хотите. Вы можете сделать три вещи:
Это верно и для некоторых других оболочек.
Вот как выполнить каждый из этих вариантов:
1. Эхо-струны
2. Статус обратного выхода
3. Поделиться переменной
источник
function
ключевое слово для определения функции bash. Это сделало бы его менее портативным. Удаление его.Вы слишком много работаете. Весь ваш сценарий должен быть:
но даже это, вероятно, слишком многословно. Я бы закодировал это:
но получившееся сообщение об ошибке немного неясно.
источник
mkdir "$lockdir" || { echo "could not create lock dir" >&2 ; exit 1 ; }
(обратите внимание;
на закрывающую фигурную скобку). Кроме того, я часто определяю функцию сбоя, которая принимает необязательный параметр сообщения, который он выводит на stderr, а затем выходит с кодом возврата 1, что позволяет мне использовать более читаемыйmkdir "$lockdir" || fail "could not create lock dir"
.cmd || fail "error msg" || return 1
если вы хотите это сделать, не так ли?fail
функция используется только для фатальных ситуаций.Если это просто тест «правда / ложь», пусть ваша функция будет
return 0
успешной илиreturn 1
неудачной. Тогда тест будет:источник
Я думаю, что возвращение 0 для succ / 1 для отказа (Гленн Джекман) и ясный и пояснительный ответ Олибра говорит само за себя; просто чтобы упомянуть своего рода "комбинированный" подход для случаев, когда результаты не являются двоичными, и вы предпочитаете устанавливать переменную, а не "выводить эхом" результат (например, если ваша функция ТАКЖЕ предполагает эхо чего-то, этот подход будет не работает). Что тогда? (ниже Bourne Shell)
как в (да, пример несколько глупый, это просто .. пример)
источник
Если у вас есть параметры для передачи функции и вы хотите получить взамен значение. Здесь я передаю «12345» в качестве аргумента функции и после обработки возвращаю переменную XYZ, которой будет присвоено значение VALUE.
Вывод:
источник