Eu quero retornar o valor de uma função chamada em um script de shell. Talvez eu esteja sentindo falta da sintaxe. Eu tentei usar as variáveis globais. Mas isso também não está funcionando. O código é:
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
Mridul Vishal
fonte
fonte
Respostas:
Uma função Bash não pode retornar uma string diretamente como você deseja. Você pode fazer três coisas:
Isto também é verdade para algumas outras conchas.
Veja como fazer cada uma dessas opções:
1. Cordas de eco
2. Retornar status de saída
3. Variável de compartilhamento
fonte
function
palavra-chave para definir uma função bash. Isso tornaria menos portátil. Removendo-o.Você está trabalhando demais. Seu script inteiro deve ser:
mas mesmo isso é provavelmente muito detalhado. Eu codificaria:
mas a mensagem de erro resultante é um pouco obscura.
fonte
mkdir "$lockdir" || { echo "could not create lock dir" >&2 ; exit 1 ; }
(observe o;
antes da chave de fechamento). Além disso, costumo definir uma função de falha que recebe um parâmetro de mensagem opcional que é impresso no stderr e sai com o código de retorno 1, permitindo que eu use o mais legívelmkdir "$lockdir" || fail "could not create lock dir"
.cmd || fail "error msg" || return 1
se você quiser fazer isso, é?fail
função usada apenas para situações fatais.Se for apenas um teste verdadeiro / falso, tenha sua função
return 0
para o sucesso e oreturn 1
fracasso. O teste seria então:fonte
Eu acho que retornar 0 para succ / 1 para fail (glenn jackman) e a resposta clara e explicativa de olibre diz tudo; apenas para mencionar um tipo de abordagem "combinada" para os casos em que os resultados não são binários e você prefere definir uma variável em vez de "ecoar" um resultado (por exemplo, se sua função TAMBÉM supor ecoar algo, essa abordagem será não funciona). O que então? (abaixo é Bourne Shell)
como em (sim, o exemplo é um pouco bobo, é apenas um .. exemplo)
fonte
Caso você tenha alguns parâmetros para passar para uma função e deseje um valor em troca. Aqui estou passando "12345" como argumento para uma função e após o processamento retornando a variável XYZ que será atribuída a VALUE
Resultado:
fonte