次のコマンドでは、マイナス記号(-)と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.