Uma nova linha é igual a duas novas linhas no bash?

0

Então, enquanto eu estava testando um programa python em que eu estava trabalhando, notei que echo -e "\n" e printf "\n" de acordo com a instrução if no bash.

Mesmo que echo -e "\n" imprima duas novas linhas (acrescenta uma por padrão) e printf imprime apenas uma.

if [ "$(echo -e "\n")" == "$(printf "\n")" ]
then
    echo 1
fi

e

if [ $(echo -e "\n") -eq $(printf "\n") ]
then
    echo 1
fi

ambas as saídas 1 no bash. Também percebi que atribuir as saídas a uma variável gera apenas uma nova linha para os dois echo -e "\n" e printf "\n" ,

A=$(echo -e "\n")
B=$(printf "\n")

echo $A # outputs a single newline
echo $B # also outputs a single newline

Estou pensando que echo pode gerar a nova linha de maneira diferente com fx. stderr?

    
por Javad 13.02.2018 / 17:10

1 resposta

2

As novas linhas são excluídas pela substituição de comando $() . A manpage de bash diz:

Command substitution allows the output of a command to replace the command name. There are two forms:

$(command)

or

'command'

Bash performs the expansion by executing command in a subshell environment and replacing the command substitution with the standard output of the command, with any trailing newlines deleted. Embedded newlines are not deleted, but they may be removed during word splitting. The command substitution $(cat file) can be replaced by the equivalent but faster $(< file).

    
por 13.02.2018 / 18:51