Por que você deveria se importar com o que eu digo, apesar de haver uma resposta mais de 250 votada
Não é isso 0 = true
e 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 09
retorna verdadeiro ou falso, correspondendo ao status da linha08
Linha 13
retorna 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 status
variá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 exit
pode fazer você pensar que está saindo do script, quando na realidade está saindo do $(...)
subshell.
** Se você absolutamente insistir em usar return 1
falso, 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.
function
palavras-chave,myfun() {...}
sufixos