<<-EOC 是什么意思?

Lee*_*Lee 3 linux bash io-redirection shell-script

我想知道下面命令中的减号 (-) 和 EOC 是什么意思。我知道像 Perl 这样的一些语言允许您选择任意字符组合(不绑定到 EOF),但这里是这种情况吗?负号对我来说完全是个谜。提前致谢!

ftp -v -n $SERVER  >> $LOG_FILE <<-EOC
            user $USERNAME $PWD
            binary
            cd $DIR1
            mkdir $dir_lock
            get $FILE
            bye
EOC
Run Code Online (Sandbox Code Playgroud)

Kus*_*nda 6

这是此处文档重定向。

command <<-word
here-document contents
word
Run Code Online (Sandbox Code Playgroud)

用于word分隔此处文档的 是任意的。使用大写单词很常见,但不是必需的。

in-<<-word作用是从此处文档内容的每行开头删除制表符。

cat <<-SERVICE_ANNOUNCEMENT
    hello
    world
SERVICE_ANNOUNCEMENT
Run Code Online (Sandbox Code Playgroud)

如果上面的此处文档在每行开头都使用文字制表符编写,则将导致输出

hello
world
Run Code Online (Sandbox Code Playgroud)

而不是

    hello
    world
Run Code Online (Sandbox Code Playgroud)

结束分隔符之前的制表符也会被删除<<-(但不能没有-):

cat <<-SERVICE_ANNOUNCEMENT
    hello
    world
    SERVICE_ANNOUNCEMENT
Run Code Online (Sandbox Code Playgroud)

(相同的输出)