为什么没有 shell 扩展?

为什么没有 shell 扩展?

为什么 bash 无法展开*?我想删除sites-*除最后一个文件之外的所有文件,但我想在运行命令之前测试扩展,但rm缺少一个--dry-run选项:

$ ls -la
total 1856
drwxr-xr-x  4 dotancohen dotancohen  12288 Jun 11 13:33 .
drwxrwxr-x 28 dotancohen dotancohen   4096 Jun  6 18:04 ..
-rw-r--r--  1 dotancohen dotancohen   3072 Jun 10 15:07 sites-1402402025.sqlite3
-rw-r--r--  1 dotancohen dotancohen   7168 Jun 10 15:08 sites-1402402111.sqlite3
-rw-r--r--  1 dotancohen dotancohen  12288 Jun 10 15:13 sites-1402402393.sqlite3
-rw-r--r--  1 dotancohen dotancohen   9216 Jun 10 15:15 sites-1402402493.sqlite3
-rw-r--r--  1 dotancohen dotancohen   9216 Jun 10 15:16 sites-1402402540.sqlite3
-rw-r--r--  1 dotancohen dotancohen 592896 Jun 10 15:48 sites-1402403316.sqlite3

$ ls sites-1402402402*
ls: cannot access sites-1402402402*: No such file or directory

$ echo rm sites-1402402402*
rm sites-1402402402*

$ echo sites-1402402402*
sites-1402402402*

$ find sites-1402402402\*
find: `sites-1402402402*': No such file or directory

我知道我可以使用-i带管道的选项yes no,但我想诊断这个扩展问题。我没有任何不寻常的 Bash 配置,尽管我.bashrc现在无法简单地禁用无关的原因。因此,我问什么可能会阻止 Bash 执行 shell 扩展

答案1

你的命令(ls sites-1402402402*)是错误的。

正确的是,

ls sites-140240*

或者

ls sites-14024020*

当您运行此命令时ls sites-1402402402*ls命令会尝试搜索名称sites-1402402402中必须包含的文件名。但这个文件名实际上并不出现在您的文件名中。因此它不会产生此类文件或目录错误。但如果您运行ls sites-140240*命令,ls将列出所有以sites-140240(* 字符在通配符中充当文件名扩展的“通配符”)。

相关内容