O bash suporta substituição de variável na return
instrução?
De man bash
:
return [n]
Causes a function to stop executing and return the value specified by n to its caller.
É n
permitido ser uma substituição de variável?
Testei no seguinte exemplo:
$ cat t345.sh
f()
{
local x=13
return $x
}
f
echo $?
$ bash t345.sh
13
$ bash --version
GNU bash, version 5.2.21(1)-release (x86_64-pc-cygwin)
Aqui vemos que Bash não reclama return $x
e f
retorna 13.
Foi linkado isso o tempo todo OU desde qual versão o Bash começou a oferecer suporte a isso?
Sempre foi assim, porque a substituição de variáveis não é feita por instrução.
Não é
return
que expande a variável, assim como não éecho
que expandiriaecho $?
– todas essas expansões são feitas como uma das etapas de análise de entrada antes da execução do comando; o que significa que eles se aplicam igualmente à maioria dos comandos (com apenas algumas exceções). No momento da execução, o comando já terá se tornadoreturn 13
(ouecho 13
) e as instruções individuais não precisarão saber nada sobre variáveis.(Na verdade, ele nem mesmo distingue entre diferentes partes do comando - você poderia até ter feito isso
local y=return; $y $x
e isso também teria o mesmo efeito quereturn 13
, o que, esperançosamente, deixa claro o que quero dizer.)