是否有一些特殊的路径前缀,比如 ~ 表示“在 PATH 中到处搜索”?我知道这是只提供可执行基本名称时的默认行为,但是对于像 a=b 这样的花哨的可执行名称,我只能使用完整或相对路径(如 ./a=b)来调用它。如果我只提供基本名称 a=b,bash 会将其解释为变量赋值。
问问题
929 次
4 回答
4
它不完全是前缀,但引用可执行文件名称(如'a=b'
)会在我的 PATH 中找到它。(重击 3.2.17)
于 2012-08-31T11:46:40.333 回答
3
没有这样的前缀。如果您的唯一目的是执行带有“奇怪”字符的文件名,则不需要一个:只需引用这些字符,例如'a=b'
或a\=b
. 然后 bash 的解析和扩展导致命令的第一个单词是a=b
,它像任何其他命令名称一样在路径中查找。
如果要在路径中查找程序但不执行它,请使用command -v
. (还有其他具有相同效果的内置函数,command -v
具有可移植的优点(它是一个 bash 内置函数,它在 POSIX 中)。不要使用which
,它是一个外部命令,不可靠且不可移植。)
如果要查找路径中包含的所有目录a=b
,可以使用type -a
.
type -aP a=b
于 2012-08-31T12:15:51.040 回答
1
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.
于 2012-08-31T12:05:50.723 回答
0
我个人会使用引号,但另一种可能性是:
(exec a=b)
于 2012-08-31T11:59:56.713 回答