2014-11-08 22 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時,它會查找匹配函數(或內置或外部命令)並查找以前定義的函數。