
Me gustaría saber qué significan el menos (-) y el EOC en el siguiente comando. Sé que algunos lenguajes como Perl te permiten elegir cualquier combinación de caracteres (no vinculados a EOF), pero ¿es ese el caso aquí? Y el menos es un completo misterio para mí. ¡Gracias de antemano!
ftp -v -n $SERVER >> $LOG_FILE <<-EOC
user $USERNAME $PWD
binary
cd $DIR1
mkdir $dir_lock
get $FILE
bye
EOC
Respuesta1
Esa es una redirección de documentos aquí.
command <<-word
here-document contents
word
El word
método utilizado para delimitar el aquí-documento es arbitrario. Es común, pero no necesario, utilizar una palabra en mayúscula.
El -
in <<-word
tiene el efecto de que las pestañas se eliminarán del principio de cada línea en el contenido del documento aquí.
cat <<-SERVICE_ANNOUNCEMENT
hello
world
SERVICE_ANNOUNCEMENT
Si el documento aquí anterior se escribiera con tabulaciones literales al comienzo de cada línea, daría como resultado el resultado
hello
world
en vez de
hello
world
Las pestañas antes del delimitador final también se eliminan con <<-
(pero no sin -
):
cat <<-SERVICE_ANNOUNCEMENT
hello
world
SERVICE_ANNOUNCEMENT
(misma salida)
Respuesta2
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.