PATHpath前缀

有没有像〜这样的特殊path前缀,表示“在PATH中到处search”? 我知道这是只提供可执行的基本名称时的默认行为,但像a = b这样的花哨的可执行文件名称,我只能用path调用它,不pipe是完全的还是相对的./a=b。 如果我只提供basename a = b,bash会将其解释为variables赋值。

没有这样的前缀。 如果您的唯一目的是执行带有“奇怪”字符的文件名,则不需要它:只需引用这些字符,例如'a=b'或“ a\=b 。 然后bash的解析和扩展结果是你的命令的第一个单词是a=b ,这个命令在任何其他命令名称的路径中查找。

如果要查找路径中的程序但不执行它,请使用command -v 。 (还有其他的内建函数有相同的效果, command -v具有便携的优点(这是一个bash内建的,在POSIX中),不要使用which ,它是一个外部命令,不可靠,不可移植。

如果要查找包含a=b 的路径中的所有目录 ,可以使用type -a

 type -aP a=b 

这不是一个前缀,但引用可执行文件的名称(如'a=b' )在PATH找到我。 (Bash 3.2.17)

内置command是专门为此目的而设计的,即查找命令(不是别名,也不是函数)。

 command a=b 

应该做的伎俩。 从bash手册:

  command [-pVv] command [arg ...] Run command with args suppressing the normal shell function lookup. Only builtin commands or commands found in the PATH are executed. If the -p option is given, the search for command is performed using a default value for PATH that is guaranteed to find all of the standard utilities. If either the -V or -v option is supplied, a description of command is printed. The -v option causes a single word indicating the command or file name used to invoke command to be displayed; the -V option produces a more ver‐ bose description. If the -V or -v option is supplied, the exit status is 0 if command was found, and 1 if not. If neither option is supplied and an error occurred or command cannot be found, the exit status is 127. Otherwise, the exit status of the command builtin is the exit status of command. 

我个人会用引号,但另一种可能性是:

 (exec a=b)