Como faço para passar uma variável multilinha como um parâmetro para uma função

4

Tentar capturar e exibir a saída de onda estava me enlouquecendo. Eu finalmente encontrei uma solução alternativa, mas não entendo por que isso é necessário.

Aqui está um script que falha:

#!/bin/bash
function echo_output() {
    echo $@
}

CURL_OUTPUT=$(curl -sL --head www.google.com/foobar)
echo_output "$CURL_OUTPUT"

Aqui está um script que funciona: (escapando dos retornos de carro)

#!/bin/bash
function echo_output() {
    OUT="${@//[$'\r']/\r}"
    echo $OUT
}

CURL_OUTPUT=$(curl -sL --head www.google.com/foobar)
echo_output "$CURL_OUTPUT"

O que dá? O que é especial sobre novas linhas e "$ @"? Obrigado pela ajuda.

    
por righdforsa 05.05.2013 / 20:05

1 resposta

2

Eu não acho que haja algo errado com $ @.

Mas, no primeiro caso, para imprimir essa variável de forma limpa como um parâmetro que você atribuiu para curl com saída tendo novas linhas, em sua função echo_output () você precisa citar o "$ @", nesse caso "echo" (que por sua vez faz apenas imprimir seus argumentos posicionais em saída padrão e nada mais) vai dividir as palavras - > argumentos (parâmetros) corretamente. Como Dawud mencionou, é melhor usar o printf nesses casos.

Novamente no seu caso:

function echo_output() {
echo "$@"
}

fará isso.

    
por 06.05.2013 / 00:10

Tags