我想知道下面命令中的减号 (-) 和 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
分隔此处文档的 是任意的。使用大写单词很常见,但不是必需的。
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.