我想在 zsh 中创建一个别名,运行以 开头的最后一个终端命令node
。我可以用 运行该命令!?node
,但无法用 创建别名alias N='!?node'
。我该如何创建这个别名?
答案1
历史记录扩展在命令行上执行前别名扩展。因此,将历史扩展放入别名中是行不通的,因为别名扩展后,不会再执行历史扩展。
另一方面,参数扩展是执行后别名扩展。因此,你可以改用这个:
alias N='"${(z)history[(r)node *]}"'
(r)
获取其后的第一次出现的模式。在本例中,它将检索最近匹配的历史记录项,因为$history
总是按从最新到最旧的顺序排列。(z)
将字符串解析为代码并返回结果 shell 单词。否则,整个扩展将被视为一个单词。"
双引号是"
必要的,以便正确解析空格。否则,它将被视为单词分隔符,从而导致语法错误。'
单引号是'
必要的,以防止在声明时立即执行参数扩展。