bash - 为什么脚本中的两个连续制表符和 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 片段编写了错误的格式(两个选项卡和),如下所示。
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)
Tab 和 tab 将显示所有 1137 ,而不是列出当前目录中的文件。
解决方案
推荐阅读
- python-requests - 如何修复 VS 代码中的“点子无法识别错误”
- scala - 如何从 Scala 中的选项列表中收集非无值?
- julia - 在 Julia 中对机器学习 (flux) 代码进行基准测试
- javascript - MVC 在表单提交期间从 Javascript 更改输入值
- c# - C#9,.NET 5.0 字段比发布中的属性更快
- python - 字典不适用于 txt 文件中的 DNA 字符串
- spring-boot - 我可以从我的 Gradle 平台定义中提取 Gradle org.springframework.boot 插件的版本吗
- c++ - 确定实例是子类还是基类
- asp.net-core-2.0 - 有没有办法在.net核心的OnModelCreating中的表中使用order by子句
- ruby-on-rails - Rails Google Oauth - Works for some users and not others