我之前在终端上玩过,发现我可以通过制作单字命令('ls','cat','python2.7','exit')与命令命名相同的文件或目录。然而,我不能执行'多字'命令('rm \ -rf *','ls -a','python2.7 \ test.py')(这也导致我发现你不能删除名为'-rf'的目录和'rm -rf *')除非参数是按字母顺序排列的。表面上看,当你传入*到bash时,它会按照字母顺序读取文件/目录的名称,并将每个连续的名称作为参数传递给前一个命令。例如:Bash:使用文件名作为通配符的命令
$ mkdir cat
$ touch dog
$ vim dog # at this point I put 'Hello!' into dog
$ *
Hello!
为什么通配符不允许我带空格执行文件的命令,但允许我执行多个文件名的命令?谢谢!
编辑:也别名不工作的原因。例如:
$ alias lsa='ls -a'
$ mkdir lsa
$ *
No command 'lsa' found, did you mean:
...
lsa: command not found
任何人都知道这是为什么?
不知道这个的目的是什么,只是不建议创建名为“sudo”的文件。 – pmod
我只是觉得它很整洁,想知道一些关于它背后的机制的更多细节。不知道为什么它被启用。 –
也许“strace *”将有助于理解... – pmod