您要问的内容并没有多大意义。
关键字意味着它是外壳语法的一部分。这些通过标记识别。引用它们足以使Shell停止识别。
不过,在大多数shell中都可以为关键字加上别名。因此,别名的优先级高于关键字(实际上,它们的扩展较早,在此之后,您可以拥有更多的别名,关键字的令牌化更多)...
别名(使用定义的zsh别名除外,alias -g仅在命令位置扩展),因此通常不在builtin the-alias。
函数的优先级高于内建函数,而内建函数优先于外部命令(然后$PATH确定要使用哪个命令)。
您可以使用以下命令强制内置:
builtin the-cmd and its args
(尽管应该注意,这不是标准命令)。
您可以通过引用别名来禁用别名(尽管引用的版本在某些shell中也可以使用别名)。
因此,例如(此处为zsh语法):
'while'() echo function while
alias 'while=echo alias while'
编写while true实际上会输出alias while true,并且将无法使用while关键字,因为引用它会同时禁用别名和关键字。
您可以使用以下while函数调用该函数:
'whi'le whatever
如果有一个while内置函数(但当然不会在具有while关键字的那些shell中使用它们),则可以这样编写:
builtin while whatever
并调用该while命令,您将编写:
env while whatever
或zsh(在非sh仿真中):
command while whatever
(在其他shell中,command仅阻止功能,而不能内置)
要么
/full/path/to/while whatever
当然,没有什么可以阻止您执行更愚蠢的事情,例如:
alias 'while=while "w"hile; do'
"while"() { while "whi"le; done; }
至少在zsh中是有效的(但很愚蠢)。
command抑制函数查找,但是这两个都没有指定将使用其余的哪些同义词。我正在寻找一种指定仅执行特定同义词的方法。