为什么脚本中的两个连续制表符和EOF会导致当前目录中的列表文件?

时间:2018-04-26 01:42:50

标签: bash ls heredoc

bash脚本中的正常和正式的doc如下所示。

clear-mysql(){
    mysqlword="xxxxx"
    port="22"
    ip="11.22.33.44"
    tmpdb="xxxx"
    ssh -p $port   root@{$ip}  "mysql -u root -p$mysqlword <<EOF
        use ${tmpdb};
        UPDATE xx SET yy = replace(post_content, 'domain', '"http://$ip/wp"');
EOF"
}

你可以在这种bash中使用另一种正确的格式(标签和<<-)。

clear-mysql(){
    mysqlword="xxxxx"
    port="22"
    ip="11.22.33.44"
    tmpdb="xxxx"
    ssh -p $port   root@{$ip}  "mysql -u root -p$mysqlword <<-EOF
        use ${tmpdb};
        UPDATE xx SET yy = replace(post_content, 'domain', '"http://$ip/wp"');
        EOF"
}

现在我为这个简单的bash片段写了一个错误的格式(两个标签和<<-),如下所示。

clear-mysql(){
    mysqlword="xxxxx"
    port="22"
    ip="11.22.33.44"
    tmpdb="xxxx"
    ssh -p $port   root@{$ip}  "mysql -u root -p$mysqlword <<-EOF
        use ${tmpdb};
        UPDATE xx SET yy = replace(post_content, 'domain', '"http://$ip/wp"');
                EOF"
}

将其复制并粘贴到终端中。

enter image description here

我知道这是一种错误的格式,我知道bash中的字符串格式正确。
困扰我的是,为什么两个标签<<-EOFEOF导致列出当前目录中的所有文件?
是的,两个标签触发了自动完成,

[root@localhost tmp]# 
Display all 1137 possibilities? (y or n)

选项卡和选项卡将显示所有1137,而不是列出当前目录中的文件。

enter image description here

0 个答案:

没有答案