use*_*585 21 linux unix bash command-line
我在 Red Hat Linux 上的终端中乱搞,当我输入星号 ( *) 后跟回车时,它执行了我目录中的一个程序。为什么?
我最好的猜测是 Unix 将其视为通配符,因此它执行了第一个字母程序。由于my_program.exe和one_of_my_programs.program可以通过简单地输入文件名来执行,通配符代表所有可能的文件。由于程序首先按字母顺序排列,Unix 会执行它。这是一个正确的判断吗?
AFH*_*AFH 20
你的解释是正确的。其余文件将作为其参数列表显示。
请注意,仅当程序设置了可执行位并且当前目录在PATH列表中时,它才会执行此操作。
一些可能有助于理解的注释:-
./*则该PATH条目不是必需的。. *or. ./*并且第一个匹配的文件是一个脚本,那么它不需要是可执行的,也不需要当前目录在其中PATH(对于除 之外的 shell 可能不是真的bash)。小智 11
这表明这.是您的PATH变量的一部分。出于安全原因,这是一个非常糟糕的主意(自然,Windows 必须将其设为不可修改的默认值)。
然而,这个“建议”只是适度有效:如果您rm在当前目录中有一个文件,*那么执行默认值 就可以了rm:
/tmp$ mkdir ohno
/tmp$ cd ohno
/tmp/ohno$
/tmp/ohno$ ls
/tmp/ohno$ touch rm what
/tmp/ohno$ ls
rm what
/tmp/ohno$ *
/tmp/ohno$ ls
rm
/tmp/ohno$
Run Code Online (Sandbox Code Playgroud)
如您所见,执行的不是rm当前目录(一个空且不可执行的文件),而是系统默认的/bin/rm.
当涉及通配符时,请务必仔细检查您的命令。这是有史以来最可怕的消息之一:
rm: cannot remove '.o': No such file or directory
Run Code Online (Sandbox Code Playgroud)
这是调用的结果
rm * .o
Run Code Online (Sandbox Code Playgroud)
,或多或少是人们可以想出的最糟糕的虚假空间布局。