
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 word
usado para delimitar o documento aqui é arbitrário. É comum, mas não necessário, usar uma palavra maiúscula.
O -
in <<-word
tem 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.