Retornando valores locais de variáveis Bash?

0

Eu estudei este artigo chamado Retornando valores das funções Bash . Dados

Lorem.
\begin{document}
hello
\end{document}

Caso nº 1 que não funciona

Código

#!/bin/bash
function getStart {
        local START="$(awk '/begin\{document\}/{ print NR; exit }' data.tex)"
}

START2=$(getStart)
echo $START2

que retorna falsamente uma linha vazia. Espero 1 . Por que o script retorna uma linha vazia?

Caso 2, que funciona

Código

#!/bin/bash
function getStart {
        local START="$(awk '/begin\{document\}/{ print NR; exit }' data.tex)"
        echo $START
}

getStart

, que imprime corretamente 1 .

Saída da resposta da choroba

#!/bin/bash
function getStart {
        local START="$(awk '/begin\{document\}/{ print NR; exit }' data.tex)"
        echo $START
}

START2=$(getStart)
echo $START2

fornece o linenumber apenas uma vez, o que não é o resultado esperado. Eu acho que deveria fazer isso duas vezes.

    
por Léo Léopold Hertz 준영 11.09.2015 / 14:23

2 respostas

2

$(...) (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 .

    
por 11.09.2015 / 14:26
0

Basta executar o comando awk nele e esquecer a captura. Funções podem ecoar algo e, além disso, retornam um status de saída. Se você não retornar explicitamente (por exemplo, return 1 ), o status de saída de uma função será o status de saída do último comando. É por isso que você provavelmente não quer capturar + eco na função. Ele iria sombrear o status de saída do comando capturado com o status de saída do eco (0, exceto circunstâncias incomuns).

    
por 12.09.2015 / 01:05