# Zsh

> Командная оболочка Unix, совместимая с sh, с мощным автодополнением, глоббингом и гибкой настройкой; оболочка по умолчанию в macOS с 2019 года.

Источник: https://llmdocs.ru/wiki/zsh/ · обновлено 2026-11-09 · лицензия CC BY-SA 4.0

- **Автор**: Пол Фальстад (Paul Falstad)
- **Первый выпуск**: 1990
- **Тип**: командная оболочка Unix
- **Совместимость**: POSIX sh (в режиме эмуляции), во многом Bash
- **Лицензия**: MIT-подобная (Zsh License)
- **По умолчанию**: macOS Catalina (10.15) и новее, Kali Linux
- **Файлы настройки**: ~/.zshenv, ~/.zprofile, ~/.zshrc, ~/.zlogin
- **Сайт**: zsh.org
**Zsh** (*Z shell*) — командная оболочка для Unix-подобных систем, расширяющая классический Bourne shell (sh). Zsh понимает почти все скрипты для [Bash](https://llmdocs.ru/wiki/shell-bash.md), но добавляет к ним развитое программируемое автодополнение, расширенный глоббинг (шаблоны имён файлов), исправление опечаток, общую историю между сессиями и систему тем и плагинов. С версии macOS Catalina (2019) zsh — оболочка по умолчанию на Mac.[3]

## История

Первую версию написал в 1990 году Пол Фальстад, тогда студент Принстона. Название происходит от логина преподавателя Чжуна Шао (Zhong Shao) — `zsh`. Со временем проект перешёл к сообществу; разработку координирует группа мейнтейнеров, исходники и документация доступны на zsh.org.[1]

Широкую популярность zsh получил в 2010-х благодаря фреймворку **Oh My Zsh** (2009), который упростил установку тем и плагинов.[4] Переход Apple на zsh был связан с лицензией: Bash в macOS оставался на версии 3.2, последней под GPLv2, а более новые версии распространяются под GPLv3.

## Отличия от Bash

Zsh не является строгим надмножеством Bash, но различия обычно заметны только в скриптах.[5]

| Возможность | Bash | Zsh |
|---|---|---|
| Индексы массивов | с 0 | с 1 (по умолчанию) |
| Разбиение `$var` на слова | да | нет (без `setopt SH_WORD_SPLIT`) |
| Рекурсивный глоб `**/` | с `shopt -s globstar` | встроен |
| Квалификаторы глоба | нет | `*(.)`, `*(/)`, `*(om[1,5])` |
| Правый промпт | нет | `RPROMPT` |
| Автодополнение | bash-completion | compsys, с меню и описаниями |

Отсутствие разбиения переменных на слова — частый источник сюрпризов при переносе скриптов, но и защита от целого класса ошибок с пробелами в именах файлов. Для переносимых скриптов принято писать `#!/bin/sh` или `#!/usr/bin/env bash`, а zsh использовать как интерактивную оболочку.

## Возможности

**Глоббинг.** Квалификаторы в скобках фильтруют файлы прямо в шаблоне: `ls **/*.py(.m-7)` — обычные файлы `.py`, изменённые за последнюю неделю, во всех подкаталогах; `rm *(.L0)` — пустые файлы. Это часто заменяет связку [find и xargs](https://llmdocs.ru/wiki/find-xargs.md).

**Автодополнение.** Система `compsys` знает аргументы тысяч команд (git, docker, kubectl, ssh-хосты из `~/.ssh/config`), показывает меню со стрелками и подсказками. Включается строками:

```zsh
autoload -Uz compinit && compinit
zstyle ':completion:*' menu select
```

**История.** Опции `SHARE_HISTORY`, `HIST_IGNORE_DUPS`, `EXTENDED_HISTORY` позволяют делить историю между окнами терминала, убирать дубли и хранить время выполнения команд.

**Прочее.** Автоматический `cd` по имени каталога (`AUTO_CD`), стек каталогов (`pushd`/`popd`, `cd -<Tab>`), коррекция опечаток (`CORRECT`), глобальные алиасы (`alias -g G='| grep'`), модульная загрузка функций через `autoload`.

## Файлы настройки

Zsh читает конфигурацию в определённом порядке:[2]

1. `~/.zshenv` — всегда, для любых экземпляров (в том числе скриптов); подходит для [переменных окружения](https://llmdocs.ru/wiki/environment-variables.md) вроде `PATH`.
2. `~/.zprofile` — для оболочек входа (login shell).
3. `~/.zshrc` — для интерактивных оболочек: алиасы, промпт, плагины.
4. `~/.zlogin` и `~/.zlogout` — при входе и выходе.

Системные аналоги лежат в `/etc/zsh/` или `/etc/`.

## Фреймворки и плагины

- **Oh My Zsh** — самый популярный фреймворк: сотни плагинов (`git`, `docker`, `kubectl`) и тем. Минус — замедляет запуск оболочки.
- **Prezto**, **zinit**, **antidote** — более лёгкие менеджеры плагинов с ленивой загрузкой.
- **zsh-autosuggestions** — подсказывает команду из истории серым текстом; **zsh-syntax-highlighting** — подсвечивает синтаксис по мере ввода.
- **Powerlevel10k** и кроссплатформенный **Starship** — быстрые информативные промпты (ветка git, код возврата, версия языка).

## Практика

```bash
# сменить оболочку на zsh
chsh -s "$(command -v zsh)"

# замерить скорость запуска
time zsh -i -c exit

# проверить, какая оболочка запущена
echo $ZSH_VERSION
```

Если запуск занимает больше 200–300 мс, обычно виноваты тяжёлые плагины или повторный `compinit`; профилировать можно модулем `zmodload zsh/zprof`.

## См. также

- [Shell и Bash](https://llmdocs.ru/wiki/shell-bash.md)
- [Linux](https://llmdocs.ru/wiki/linux.md)
- [tmux](https://llmdocs.ru/wiki/tmux.md)
- [Конвейеры и перенаправление (pipes)](https://llmdocs.ru/wiki/pipes-redirection.md)

## Источники

1. [Zsh — официальный сайт](https://www.zsh.org/)
2. [Zsh Manual (zsh.sourceforge.io)](https://zsh.sourceforge.io/Doc/Release/)
3. [Apple — Use zsh as the default shell on your Mac](https://support.apple.com/en-us/102360)
4. [Oh My Zsh — репозиторий](https://github.com/ohmyzsh/ohmyzsh)
5. [Zsh FAQ — How does zsh differ from bash](https://zsh.sourceforge.io/FAQ/zshfaq02.html)
