作为 Linux 用户,我一直只使用 bash,因为它是我使用的每个发行版的默认设置。使用其他 Unix 系统(如 BSD)的人似乎更频繁地使用其他 shell。为了多学习一点,我决定尝试一下 zsh。
作为 bash 用户:
Gil*_*il' 46
在其他 Stack Exchange 站点上已经有很多关于该主题的活动。我从 bash 切换到 zsh 的经验,据我所知(那是几年前²),我没有错过任何事情。我收获了很多;以下是我认为最常用的简单的 zsh 特定功能:
偶尔使用 bash 时,我最怀念的 zsh 功能是 autocd:在 zsh 中,执行目录意味着更改为它,前提是您打开该autocd选项。?
另一个非常有用的功能是花哨的通配符。该象形文字字符是有点难以记住,但非常方便(如,它往往快看看他们比写同等find命令)。一些更简单的例子:
foo*~*.bak=foo*除了那些匹配之外的所有匹配*.bak
foo*(.)= 只匹配常规文件foo*
foo*(/)= 只匹配目录 = 只匹配foo*
foo*(-@)悬空符号链接foo*
foo*(om[1,10])= 10 个最近的文件匹配foo*
foo*(Lm+1)= 只匹配大小 > 1MB 的文件=在目录中及其所有子目录,递归?
dir/**/foo*foo*dir
对于花哨的重命名,zmv内置函数会很方便。例如,将每个复制file到file.bak:zmv -C '(*)(#q.)' '$1.bak'
bash 和 zsh 都有一个不错的完成系统,需要显式打开(. /etc/bash_completion或autoload -U compinit; compinit)。Zsh 的可配置性要好得多,而且通常也更漂亮。
如果您在没有 的情况下运行 zsh .zshrc,它会启动一个交互式菜单,让您选择配置选项。(某些发行版可能会禁用此功能;在这种情况下,请运行autoload zsh-newuser-install; zsh-newuser-install。)我建议启用推荐的历史记录选项,打开(“新式”)补全,并打开除beep. 稍后,当您发现它们时配置更多选项。
²当时可编程补全是 zsh 的杀手级功能,但 bash 很快就获得了它。
? bash 仅在版本 4 中获得的功能(因此在发布此答案时还没有广泛使用,并且在 macOS 上系统提供的 bash 上不可用)是较小的类型。
Bash 具有能够使用以下方式打开端口的功能
/dev/tcp/host/port
Run Code Online (Sandbox Code Playgroud)
或者
/dev/udp/host/port
Run Code Online (Sandbox Code Playgroud)
然而,它在 Debian 中被禁用,因为它被视为一种障碍(如果路径确实存在)并且超出了 shell 应该做的范围。更多信息[debian 邮件列表]