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

Zam*_*nji 10 bash zsh alias

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

Gil*_*il' 13

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

这同样适用于变量定义和函数定义,只要您使用所有 shell 支持的语法子集。

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

emulate -LR sh 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

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

这基本上就是我所做的。例如,我有几分复杂的代码,对产生的别名ls与取决于什么可用我最喜欢的选项(--color-G-F等); 它与外壳无关,所以进入.common.rc.sh。我也有壳依赖的别名,就像alias zcp='zmv -C'在云.zshrc

  • 我发现一个微小的区别是 zsh 的 `alias` 将一个以 `+` 开头的参数视为引入了一个类似 `-` 的选项,所以 `alias +=something` 在 zsh 中必须写成 `alias -- +=something` . 不要认为“模拟”会改变这一点。 (3认同)

小智 8

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