2014-11-08 23 views
1

在学习ZSH的同时玩耍时,我遇到了好奇心,并且我正在寻找与此相关的信息。我想知道为什么,这并不工作(定义,然后展开单个的eval调用中的别名)的技术解释:ZSH别名在eval字符串中的定义和扩展

eval "alias d='echo hello'; d" 

zsh: command not found: d 

,而这并不工作:

eval "function d = { echo hello; }; d" 

hello 

回答

3

eval无关与这个问题有关。电话只是

alias d='echo hello'; d 

也不会工作。

原因在于zsh解析命令行的方式。命令行中的所有别名在之前被替换为zsh甚至试图执行它。在这个例子中,当替换别名时,zsh不知道别名d,因此当查找命令d时zsh变空。

另一方面,该函数的例子起作用,因为zsh在它试图运行之前查找命令名称指向的位置。因此,首先定义了函数d,当zsh遇到命令d时,它会查找匹配函数(或内置或外部命令)并查找以前定义的函数。