Por que você deveria se importar com o que eu digo, apesar de haver uma resposta mais de 250 votada
Não é isso 0 = truee 1 = false. É: zero significa nenhuma falha (sucesso) e diferente de zero significa falha (do tipo N) .
Embora a resposta selecionada seja tecnicamente "verdadeira" , não coloque return 1** no seu código como falso . Terá vários efeitos colaterais infelizes.
- Desenvolvedores experientes o identificarão como amador (pelo motivo abaixo).
- Desenvolvedores experientes não fazem isso (por todos os motivos abaixo).
- É propenso a erros.
- Até desenvolvedores experientes podem confundir 0 e 1 como falso e verdadeiro, respectivamente (pelo motivo acima).
- Requer (ou encorajará) comentários estranhos e ridículos.
- Na verdade, é menos útil que status de retorno implícito.
Aprenda alguma festa
O manual do bash diz (ênfase minha)
retornar [n]
Faça com que uma função de shell pare de executar e retorne o valor n ao seu chamador. Se n não for fornecido , o valor retornado é o status de saída do último comando executado na função.
Portanto, nunca precisamos usar 0 e 1 para indicar Verdadeiro e Falso. O fato de fazer isso é essencialmente um conhecimento trivial, útil apenas para depurar código, entrevistar perguntas e surpreender os novatos.
O manual do bash também diz
caso contrário, o status de retorno da função é o status de saída do último comando executado
O manual do bash também diz
( $? ) Expande para o status de saída do pipeline de primeiro plano executado mais recentemente .
Uau, espera. Pipeline? Vamos voltar ao manual do bash mais uma vez.
Um pipeline é uma sequência de um ou mais comandos separados por um dos operadores de controle '|' ou '| &'.
Sim. Eles disseram que 1 comando é um pipeline. Portanto, todas as três citações estão dizendo a mesma coisa.
$? diz o que aconteceu por último.
- Borbulha.
Minha resposta
Portanto, enquanto o @Kambus demonstrou que, com uma função tão simples, isso não returné necessário. Eu acho que era irrealisticamente simples comparado às necessidades da maioria das pessoas que lerão isso.
Por que return?
Se uma função retornará o status de saída do último comando, por que usar return? Porque faz com que uma função pare de executar.
Pare a execução sob várias condições
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
O que temos aqui é ...
Line 04é um retorno explícito [-ish] true, porque o RHS de &&apenas é executado se o LHS for true
Linha 09retorna verdadeiro ou falso, correspondendo ao status da linha08
Linha 13retorna falsa por causa da linha12
(Sim, isso pode ser resolvido, mas o exemplo inteiro é artificial.)
Outro padrão comum
# 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
Observe como definir uma statusvariável desmistifica o significado de $?. (É claro que você sabe o que $?significa, mas alguém com menos conhecimento do que você terá que pesquisar no Google algum dia. A menos que seu código esteja negociando em alta frequência, mostre algum amor , defina a variável.) Mas a verdadeira desvantagem é que "se não existe status "ou vice-versa" se o status de saída "puder ser lido em voz alta e explicar seu significado. No entanto, esse último pode ser um pouco ambicioso, porque ver a palavra exitpode fazer você pensar que está saindo do script, quando na realidade está saindo do $(...)subshell.
** Se você absolutamente insistir em usar return 1falso, sugiro que você use pelo menos return 255. Isso fará com que seu futuro eu ou qualquer outro desenvolvedor que precise manter seu código questione "por que isso é 255?" Então eles estarão prestando atenção e terão uma chance melhor de evitar um erro.
functionpalavras-chave,myfun() {...}sufixos