zsh 中的别名和 bash 中的别名之间的区别

zsh 中的别名和 bash 中的别名之间的区别

我四处搜寻但找不到任何结论性的东西。 zsh中的alias命令和bash中的alias命令有区别吗?如果不是,这是否意味着我可以在两个 shell 之间共享一组别名并期望它们按我的预期工作?

答案1

该命令的语法alias在所有 Bourne 风格的 shell 中都是相同的。因此,您可以在~/.zshrc~/.bashrc~/.kshrc、之间共享它们~/.shrc,只要它们在所有 shell 中都有意义。

只要您使用所有 shell 中支持的语法子集,变量定义和函数定义也是如此。

如果您不使用 4.0 之前的 zsh 版本,则可以将所有与 shell 无关的定义放在名为(例如)的文件中~/.common.rc.sh,其中第一行是

emulate -LR sh 2>/dev/null

这告诉 zsh 仅在此文件中期望与 sh 兼容的语法。然后在~/.bashrc~/.bashrc等开头附近获取该文件~/.kshrc

这基本上就是我所做的。例如,我有一些复杂的代码,它ls根据可用的选项(--color-G-F等)为我最喜欢的选项生成别名;它与 shell 无关,所以进入.common.rc.sh.我还有与 shell 相关的别名,alias zcp='zmv -C'就像.zshrc.

答案2

根据Zsh 工作室别名它们似乎具有相同的语法,因此它们应该可以工作。

答案3

zsh'salias允许全局别名,而bashs 仅在行首展开。

zsh

alias -g L="| less -FRX"

然后你可以这样做:

verbose-command L

这里获取有用的全局别名列表。

相关内容