Чому тобі все одно, що я говорю, незважаючи на те, що є відповідь на 250+
Це не те, 0 = true
а 1 = false
. Це: нуль означає відсутність відмови (успіх) і ненульовий означає збій (типу N) .
Хоча обрана відповідь технічно "правдива", будь ласка , не вводьте return 1
** у свій код неправдивий . Це матиме кілька прикрих побічних ефектів.
- Досвідчені розробники помітять вас як любителя (з причини нижче).
- Досвідчені розробники цього не роблять (з усіх причин нижче).
- Він схильний до помилок.
- Навіть досвідчені розробники можуть помилити 0 і 1 як помилкові та істинні відповідно (з вищезгаданої причини).
- Це вимагає (або заохочуватиме) сторонніх та смішних коментарів.
- Це насправді менш корисно, ніж неявні статуси повернення.
Вивчіть трохи баш
Посібник з bash говорить (наголос мій)
повернути [n]
Виконайте функцію оболонки, щоб зупинити виконання та повернути значення n його виклику. Якщо n не подано , значення повернення - це стан виходу останньої команди, виконаної у функції.
Таким чином, нам не доведеться ВСІХ разів використовувати 0 і 1 для позначення істинного та помилкового. Те, що вони роблять, це, по суті, тривіальне знання, корисне лише для налагодження коду, запитань інтерв'ю та душі у новачків.
У посібнику з bash також йдеться
інакше статус повернення функції - це стан виходу останньої команди, виконаної
У посібнику з bash також йдеться
( $? ) Розширюється до статусу виходу останнього виконаного переднього плану трубопроводу .
О, чекай. Трубопровід? Звернемося до посібника з bash ще раз.
Трубопровід - це послідовність однієї або декількох команд, розділених одним з операторів управління '|' або "| &".
Так. Вони сказали, що 1 команда - це трубопровід. Тому всі 3 цитати говорять про одне і те ж.
$?
розповідає, що трапилось останнім часом.
- Це бульбашки.
Моя відповідь
Отже, хоча @Kambus продемонстрував, що для такої простої функції взагалі return
не потрібно. Я думаю, що це було нереально просто у порівнянні з потребами більшості людей, які це прочитають.
Чому return
?
Якщо функція повертає статус виходу останньої команди, навіщо return
взагалі використовувати ? Тому що це призводить до того, що функція припиняє виконання.
Зупинити виконання за кількох умов
01 function i_should(){
02 uname="$(uname -a)"
03
04 [[ "$uname" =~ Darwin ]] && return
05
06 if [[ "$uname" =~ Ubuntu ]]; then
07 release="$(lsb_release -a)"
08 [[ "$release" =~ LTS ]]
09 return
10 fi
11
12 false
13 }
14
15 function do_it(){
16 echo "Hello, old friend."
17 }
18
19 if i_should; then
20 do_it
21 fi
Що ми тут маємо ...
Рядок 04
є явним [-ish] істинним поверненням, тому що RHS &&
виконується лише тоді, коли LHS був істинним
Рядок 09
повертає істинну або помилкову, що відповідає статусу рядка08
Рядок 13
повертає помилково через рядок12
(Так, це може бути знищено, але весь приклад надуманий.)
Ще одна поширена закономірність
# Instead of doing this...
some_command
if [[ $? -eq 1 ]]; then
echo "some_command failed"
fi
# Do this...
some_command
status=$?
if ! $(exit $status); then
echo "some_command failed"
fi
Зауважте, як встановлення status
змінної демістифікує значення $?
. (Звичайно, ви знаєте, що $?
означає, але хтось менш обізнаний, ніж вам доведеться, Google це буде мати якийсь день. Якщо ваш код не здійснює торгівлю високою частотою, проявіть любов , встановіть змінну.) Але справжній винос - це "якщо не існує статусу "або навпаки", якщо статус виходу "можна прочитати вголос і пояснити їх значення. Однак останній може бути занадто амбітним, тому що, побачивши слово, exit
ви можете змусити вас думати, що воно виходить із сценарію, а насправді воно виходить з $(...)
нижньої частини.
** Якщо ви абсолютно наполягаєте на використанні return 1
помилкових, пропоную вам принаймні використовувати це return 255
. Це призведе до того, що ваша майбутня особа чи будь-який інший розробник, який повинен підтримувати ваш код, ставить питання "чому це 255?" Тоді вони принаймні будуть звертати увагу і матимуть більше шансів уникнути помилки.
function
ключове слово,myfun() {...}
достатньо