o uso de echo sem argumento no shell script

1

Eu tenho o seguinte script bash que encontrei na web que imprime o conjunto de energia de uma determinada linha de elementos.

p() { [ $# -eq 0 ] && echo || (shift; p "$@") |
        while read r ; do echo -e "$1 $r\n$r"; done }

após o primeiro && , há echo que não tem nenhum argumento.

Aqui está o código para testá-lo:

p $(echo -e "1\n2\n3")
    
por Forethinker 01.04.2013 / 11:21

1 resposta

3

É para fins de formatação.

$ p() { [ $# -eq 0 ] && echo || (shift; p "$@") |
>         while read r ; do echo -e "$1 $r\n$r"; done }
$ p $(echo -e "1\n2\n3")
1 2 3
2 3
1 3
3
1 2
2
1

$ p                 

$

Observe a linha em branco entre o único p e o próximo prompt. Isso é echo .

Aqui está com mais legibilidade:

p() {
    if [ $# -eq 0 ]; then
        echo
    else
        (shift; p "$@") | while read r;
            do echo -e "$1 $r\n$r";
        done
    fi
}

A razão pela qual você afirma que não funcionou sem isso é porque importa que algum comando esteja lá, caso contrário a lógica é quebrada (embora, como é, a lógica seja meio que estranho).

    
por 01.04.2013 / 12:43