Что означает

Что означает

Я хотел бы узнать, что означают минус (-) и EOC в команде ниже. Я знаю, что некоторые языки, такие как Perl, позволяют выбирать любую комбинацию символов (не привязанную к EOF), но так ли это здесь? А минус для меня — полная загадка. Заранее спасибо!

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

решение1

Это перенаправление документа.

command <<-word
here-document contents
word

Используется wordдля разграничения документа here-document произвольно. Обычно, но не обязательно, используют слово в верхнем регистре.

Эффект -in <<-wordзаключается в том, что в начале каждой строки содержимого документа будут удалены символы табуляции.

cat <<-SERVICE_ANNOUNCEMENT
    hello
    world
SERVICE_ANNOUNCEMENT

Если бы приведенный выше документ был написан с использованием литеральных табуляций в начале каждой строки, то это привело бы к выводу

hello
world

скорее, чем

    hello
    world

Табуляция перед конечным разделителем также удаляется с помощью <<-(но не без -):

cat <<-SERVICE_ANNOUNCEMENT
    hello
    world
    SERVICE_ANNOUNCEMENT

(тот же вывод)

решение2

От 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.

Связанный контент