Мне сказали в php, что лучше избегать использования команды выхода, насколько это возможно.
То же самое верно для bash?
Например, предпочтительнее ли следующее
#!/bin/bash
if [ -z $1 ]; then
echo You need to enter the directory you want to backup
else
sourceFile=$1
targetFile=/home/me/Desktop/myBackups/files_$(date +%Y_%m_%d_%s)
tar cvf $targetFile $sourceFile
fi
?]
#!/bin/bash
if [ -z $1 ]; then
echo You need to enter the directory you want to backup
exit
fi
sourceFile=$1
targetFile=/home/me/Desktop/myBackups/files_$(date +%Y_%m_%d_%s)
tar cvf $targetFile $sourceFile
Заключение в кавычки 'завершенного кода'
Используйте [выходят], когда это улучшает удобочитаемость В определенных стандартных программах, после того как Вы знаете ответ, Вы хотите [выйти] к вызывающей подпрограмме сразу. Если стандартная программа определяется таким способом, которым она не требует дальнейшей очистки, после того как она обнаруживает ошибку, [не выходить] сразу означает, что необходимо написать больше кода.
Таким образом, обычно один выход предпочтен (люди, смотрящие на Ваш код, не должны находить, что корректный оператор выхода), однако с проверкой ошибок (особенно в начале программы/стандартной программы, имеющей несколько операторов выхода, более ясно.
Вашим примером является граница, однако я сказал бы, что второе предпочтено так, чтобы обслуживание к Вашей программе/сценарию могло оставить это опрятным.
Ваша программа в настоящее время (в psudocode)
if error condition 1
// Show error message 1
else
// Do stuff
fi
или
if error condition 1
// Show error message 1
// exit
fi
// Do stuff
После того как Ваша программа выросла, Вы понимаете еще некоторые способы, которыми может перестать работать программа. Ваша программа теперь становится
if error condition 1
// Show error message 1
else
if error condition 2
// Show error message 2
else
if error condition 3
// Show error message 3
else
// Do stuff
fi
fi
fi
или возможно
if error condition 1
// Show error message 1
else if error condition 2
// Show error message 2
else if error condition 3
// Show error message 3
else
// Do stuff
fi
по сравнению с
if error condition 1
// Show error message 1
// exit
else if error condition 2
// Show error message 2
// exit
else if error condition 3
// Show error message 3
// exit
fi
// Do stuff
В моем уме последний является самым ясным в способности определить, который является ошибочными случаями и который является основным потоком программы. Теперь добавьте возвращающие различные значения (например, 0 на успехе, 1 на ошибке 1, 2 на ошибке 2, и т.д.), и различие станет более явным.
Мое предпочтение таково:
#!/bin/bash
if [[ -z "$1" ]]; then
# Notice that I added quotes and redirection
echo "You need to enter the directory you want to backup" 1>&2
exit
fi
# Notice that I fixed the indentation
sourceFile="$1"
targetFile="/home/me/Desktop/myBackups/files_$(date +%Y_%m_%d_%s)"
tar cvf "$targetFile" "$sourceFile"
Я думаю, что выход в тот момент, когда становится ясно, что программа не может продолжаться или где она явно завершена, создает самый чистый код.
На несвязанной ноте, остерегайтесь строк без кавычек в Bash. Рано или поздно тебя укусят. Это хорошая привычка всегда заключать строки в двойные кавычки (даже если это технически не нужно), если только вы не хотите использовать поведение без кавычек. Кроме того, если вы используете bash, [[
намного лучше, чем [
.
Я предполагаю, что это зависит от сценария в некоторой степени на Вашем коде и что Вы пытаетесь выполнить, прерывания, обработка ошибок, и т.д.
В целом Вы идете к любому, хотят указать статус выхода
exit 1
или набор-e
#!/bin/bash -e
Можно добавить управление обработкой ошибок во множестве путей
command 1 || echo "command 1 failed"
к записи функций к прерываниям.
Существует несколько хороших (вводных) обсуждений со ссылками: