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"
}
将其复制并粘贴到终端中。
我知道这是一种错误的格式,我知道bash中的字符串格式正确。
困扰我的是,为什么两个标签<<-EOF
和EOF
导致列出当前目录中的所有文件?
是的,两个标签触发了自动完成,
[root@localhost tmp]#
Display all 1137 possibilities? (y or n)
选项卡和选项卡将显示所有1137,而不是列出当前目录中的文件。