EOF em Cat e menos [duplicado]

1

Sou novo no script Linux e enfrento alguns comandos e não os compreendi.

cat <<- _EOF_
command1
command2
command3
_EOF_

Além disso,

less <<- _EOF
command1
command2
command3
_EOF

Então, alguém pode me explicar isso?

    
por Ghassan 08.12.2016 / 02:26

1 resposta

6

No código do programa, você precisa marcar quais partes devem ser comandos e quais devem ser dados. No tipo típico de dados estão strings , significando sequências de caracteres (letras, dígitos, etc.)

Existem diferentes maneiras de indicar literais de string. A maneira mais comum é citar os dados da string:

PATH="/home/user"
USER='joe'

Mas pode ser difícil lidar com literais de string mais longos e / ou incluir quebras de linha:

MESSAGE="This is a relatively long string which isn't represented very well as a typical quoted string.\nAnd there are linebreaks in it."

Para tais casos, você provavelmente gostaria de poder dizer: "Trate o seguinte como uma string, até que eu diga o contrário". E é exatamente isso que um documento aqui faz. É uma maneira diferente de significar uma string literal. Você define um marcador que significa o final do seu texto, depois coloca o seu texto e, em seguida, o marcador:

MESSAGE=<< EOF
Here be a long string.
With line breaks.
EOF

Você está livre para escolher o marcador, mas normalmente é algo como EOF ("fim do arquivo"), eot ("fim do texto") ou similar . Você poderia ter escolhido "ABC" da mesma forma

MESSAGE=<< ABC
Here be a long string.
With line breaks.
ABC

"Here documents", também conhecidos como "heredocs", "here-strings" ou similares, originaram-se em shells Unix como bash e hoje podem ser encontrados em muitas linguagens de programação.

Em shells, eles funcionam de forma um pouco diferente, já que não representam strings tanto quanto representam arquivos . Então, por exemplo

cat << EOF
One
EOF

é equivalente a

cat data.txt # where data.txt contains 'One'

A variante com <<- em vez de '< <' ignora os espaços em branco iniciais nos dados heredoc, para que você possa tornar seu código mais legível identificando o heredoc:

cat <<- EOF
  One
  Two
  Three
EOF
    
por Henning Kockerbeck 08.12.2016 / 02:55