为什么不带引号的通配符可以与 scp 一起远程工作?

dan*_*dan 24 shell bash wildcards

我在 Bash 中输入:

scp user@remote:~/dir/*.xml .
Run Code Online (Sandbox Code Playgroud)

它可以工作,获取在远程服务器上生成通配符的所有文件。但为什么这样做呢?我认为 Bash 在参数对像scp.

Uwe*_*Uwe 31

如果没有匹配的文件名,则 bash 中的通配符表达式会扩展到自身。因此,只要您不在本地创建任何名称匹配的文件user@remote:~/dir/*.xml,您的命令就可以在不引用的情况下工作。

  • 并且也不要启用`nullglob`,这会使它扩展为空字符串 (9认同)
  • `nullglob` 不会导致模式扩展到空字符串;它导致它完全消失。这是`scp "" .`(两个参数,其中一个是空字符串)和`scp .`(单个参数和对`scp`的无效调用)之间的区别。 (2认同)