
以下のコマンドのマイナス (-) と 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
here-document を区切るために使用word
する は任意です。大文字の単語を使用するのが一般的ですが、必須ではありません。
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.