O que significa

O que significa

Gostaria de saber o que significa o sinal de menos (-) e o EOC no comando abaixo. Eu sei que algumas linguagens como Perl permitem escolher qualquer combinação de caracteres (não vinculada a EOF), mas é esse o caso aqui? E o sinal de menos é um mistério completo para mim. Desde já, obrigado!

ftp -v -n $SERVER  >> $LOG_FILE <<-EOC
            user $USERNAME $PWD
            binary
            cd $DIR1
            mkdir $dir_lock
            get $FILE
            bye
EOC

Responder1

Esse é um redirecionamento aqui-documento.

command <<-word
here-document contents
word

O wordusado para delimitar o documento aqui é arbitrário. É comum, mas não necessário, usar uma palavra maiúscula.

O -in <<-wordtem o efeito de que as tabulações serão removidas do início de cada linha no conteúdo do documento aqui.

cat <<-SERVICE_ANNOUNCEMENT
    hello
    world
SERVICE_ANNOUNCEMENT

Se o documento aqui acima fosse escrito com tabulações literais no início de cada linha, isso resultaria na saída

hello
world

em vez de

    hello
    world

As guias antes do delimitador final também são removidas com <<-(mas não sem -):

cat <<-SERVICE_ANNOUNCEMENT
    hello
    world
    SERVICE_ANNOUNCEMENT

(mesma saída)

Responder2

De man bash:

   If the redirection operator is <<-, then all leading tab characters are
   stripped  from  input  lines  and  the line containing delimiter.  This
   allows here-documents within shell scripts to be indented in a  natural
   fashion.

informação relacionada