
Я хотел бы узнать, что означают минус (-) и 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.