我在学习 ZSH 的过程中遇到了好奇心,并且我很难找到与此相关的信息。我想知道为什么这不起作用的技术解释(定义然后在单个 eval 调用中扩展别名):
eval "alias d='echo hello'; d"
zsh: command not found: d
Run Code Online (Sandbox Code Playgroud)
而这确实有效:
eval "function d = { echo hello; }; d"
hello
Run Code Online (Sandbox Code Playgroud)
eval与该问题无关。刚刚打电话
alias d='echo hello'; d
Run Code Online (Sandbox Code Playgroud)
也不行。
原因在于 zsh 解析命令行的方式。在zsh 尝试执行命令行之前,命令行中的所有别名都会被替换。在此示例中,当别名被替换时,zsh 不知道别名d,因此 zsh 在查找命令时显示为空d。
另一方面,带有该函数的示例是有效的,因为 zsh 在尝试运行命令之前会查找命令名称指向的位置。d因此,首先定义函数,当 zsh 遇到命令时d,它会查找匹配的函数(或内置或外部命令)并找到先前定义的函数。
| 归档时间: |
|
| 查看次数: |
1448 次 |
| 最近记录: |