$(...)
(também conhecido como "Substituição de comando") captura a saída do comando ...
. Atribuir um valor a uma variável não produz saída, então não há nada para capturar. No caso # 2, echo
produz a saída.
getStart () {
local l=Hallo
echo $l
}
v=$(getStart)
echo $v
Para responder à sua atualização: a função gera Hallo
. Essa saída é capturada pela substituição do comando, porque é isso que a substituição de comandos faz, portanto, até v=$(getStart)
, o script não produz saída. Em seguida, a linha echo $v
produz Hallo
.