<<-EOC とはどういう意味ですか?

<<-EOC とはどういう意味ですか?

次のコマンドでは、マイナス記号(-)と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任意です。単語を大文字で書くのが一般的ですが、必須ではありません。

ここでは、文書の内容の各行の先頭からタブ文字を削除し-ます。<<-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.

関連情報