Zsh против сценариев Bash. Какая разница?

Zsh против сценариев Bash. Какая разница?
Такие читатели, как вы, помогают поддержать MUO. Когда вы совершаете покупку по ссылкам на нашем сайте, мы можем получать партнерскую комиссию. Читать далее.

Когда дело доходит до сценариев оболочки в Unix-подобных операционных системах, доминируют две оболочки: Bash (Bourne Again Shell) и Zsh (Z Shell). Если вы программист или системный администратор, выбор между этими двумя понятиями существенно повлияет на вашу эффективность и производительность.





МУО Видео дня ПРОКРУТИТЕ, ЧТОБЫ ПРОДОЛЖИТЬ С СОДЕРЖАНИЕМ

Понимание различий и сходств между этими двумя оболочками поможет вам оптимизировать рабочий процесс командной строки. Знание нюансов каждой оболочки поможет вам принять взвешенное решение.





Что такое Bash и Zsh?

Bash популярен как в системах Linux, так и в macOS. Это мощный инструмент, который вы можете использовать для взаимодействия с операционной системой и выполнения команд. Вы также можете используйте Bash для сценариев оболочки , который автоматизирует задачи путем написания сценариев, содержащих более одной команды.





Zsh (Z-оболочка) — это расширенная версия Bash, имеющая множество дополнительных функций. Это оболочка по умолчанию в macOS. Он также становится все более популярным в системах Linux.

Как переключиться с Bash на Zsh

Если вы используете систему Linux и хотите перейти на Zsh, начните с используя менеджер пакетов для его установки . Например, в Debian или Ubuntu используйте следующую команду:



 sudo apt install zsh

После установки его в вашей системе переключитесь на него, выполнив следующую команду:

 chsh -s $(which zsh)

Если вы используете macOS, Zsh уже установлен. Чтобы переключиться на него, выполните следующую команду:





 chsh -s /bin/zsh

Чтобы вернуться к Bash, замените Zsh на Bash в приведенных выше командах.

Чтобы проверить, какую оболочку вы используете, выполните следующую команду:





 echo $SHELL

Это поможет вам подтвердить, что вы используете именно ту оболочку, которую намеревались использовать.

Различия между Zsh и Bash

Между Zsh и Bash есть несколько различий. Учет этих различий поможет вам решить, какая оболочка лучше всего подходит вам.

1. Быстрая настройка

Zsh предлагает более простой способ настройки подсказок с помощью % -основанные escape-последовательности. Это позволяет использовать динамические подсказки с цветом и информацией. Чтобы настроить приглашение оболочки, определите PS1 (Основная подсказка).

история google удалить все мои действия
 PS1="%F{green}%n@%m %F{blue}%~ %f$ " 

В приведенном выше пользовательском приглашении имя пользователя, имя хоста и текущий каталог отображаются разными цветами:

  Zsh подскажет настройку на терминале

Есть много другие способы настройки приглашения Zsh , позволяющий установить индикатор администратора, указать дату и время и сохранить новое приглашение.

Bash использует немного другой подход, когда дело доходит до настройки подсказок. Он использует escape-коды для указания изменений цвета и форматирования в приглашении. Чтобы добиться той же настройки, что и Zsh выше, вы можете использовать следующую пользовательскую подсказку.

 PS1="\[3[32m\]\u@\h \[3[34m\]\w \[3[0m\]$ " 

С использованием \[3[0м\] имеет решающее значение, поскольку гарантирует, что изменения цвета не повлияют на текст, следующий за подсказкой.

2. Поддержка ассоциативных массивов

Zsh изначально поддерживает ассоциативные массивы. Эти массивы предоставляют удобный способ связывания данных, что упрощает организацию и извлечение информации. Использовать объявить команда для явного объявления ассоциативного массива:

 # Declare an associative array in Zsh  
declare -A my_assoc_array

Затем вы можете присвоить значения ассоциативному массиву:

 my_assoc_array=(key1 value1 key2 value2) 

И, наконец, получите доступ к значениям, используя их ключи:

 echo $my_assoc_array[key1] # Outputs: value1

Bash включил встроенную поддержку ассоциативных массивов. начиная с версии 4.0. Вы объявляете и присваиваете значения так же, как и в Zsh. Но когда дело доходит до доступа к значениям массива, вам нужно заключить ключ в фигурные скобки:

 echo "${my_assoc_array[key1]}" 

Основное отличие состоит в том, что поддержка ассоциативных массивов в Zsh более многофункциональна и продвинута, чем в Bash. Zsh позволяет ассоциативным массивам иметь ключи различных типов данных, а не только строки. Bash поддерживает только строковые ключи.

В более ранних версиях Bash вам нужно было найти обходной путь или иметь внешние инструменты для использования ассоциативных массивов.

3. Расширенные шаблоны подстановки

Расширенные шаблоны подстановки предоставляют мощный и гибкий способ выбора файлов и каталогов и управления ими на основе различных критериев. Они полезны, когда вы работаете со сложными файловыми структурами или когда вам нужен точный контроль над выбором файлов.

В сценарии Zsh вы можете включить эти шаблоны, используя команду установить выбор команда. Например, чтобы соответствовать всем .текст файлы в текущем каталоге:

 setopt extended_glob 
txt_files=(*.txt)

Чтобы сопоставить все файлы, кроме файлов с расширением .log:

 setopt extended_glob 
non_log_files=^(*.log)

В Bash вам необходимо включить их с помощью команды магазины команда с помощью extglob вариант. Например, чтобы соответствовать всем .текст файлы в текущем каталоге:

 shopt -s extglob 
txt_files=(*.txt)

Чтобы сопоставить все файлы, кроме тех, у которых .бревно расширение:

 shopt -s extglob 
non_log_files=!(*.log)

Основное различие между Zsh и Bash, когда дело касается шаблонов подстановки, заключается в команде, используемой для их включения. Однако обратите внимание, что некоторые операторы в двух оболочках различаются.

4. Расширенное расширение параметров

Zsh поддерживает косвенное расширение параметров. Это позволяет расширить значение переменной, имя которой хранится в другой переменной. Для этого вам необходимо поставить перед именем переменной восклицательный знак. ! .

 name="foo" 
result="${!name}"
echo "$result"

Bash, с другой стороны, изначально не допускает косвенного расширения. Обходной путь для этого — использование оценивать встроенная команда или ${!было} синтаксис для косвенных ссылок на переменные.

 name="world" 
var="name"
echo ${!var} # This will output: world

Сходства между Bash и Zsh

Хотя между Bash и Zsh есть различия, они также имеют некоторые сходства.

1. Синтаксис командной строки

Bash и Zsh имеют схожий синтаксис командной строки. Это здорово, поскольку означает, что большинство написанных вами команд и сценариев будут работать в любой оболочке без изменений. Zsh построен на основе Bash, поэтому включает в себя все те же основные команды и функции.

Однако есть очень незначительные различия в синтаксисе, которые вам нужно будет выявить и скорректировать.

2. Согласованность замены команд

Подстановка команд — это процесс встраивания вывода одной команды в другую. Это согласовано между обеими оболочками.

 result=$(ls) 

И в Bash, и в Zsh вы можете использовать $(команда) синтаксис для замены вывода команды в переменную. Это позволяет легко переносить сценарии между двумя оболочками.

3. Опция отладки скрипта

И Bash, и Zsh используют -Икс флаг для отладки скрипта. Когда вы запускаете сценарий с этим флагом, он отображает каждую команду перед запуском. Это поможет вам выявить проблемы в ваших сценариях.

 # Debugging a script in both Bash and Zsh 
#!/bin/bash -x

echo "Debugging Bash script"

В этом сценарии Bash -Икс флаг включает отладку. Вы можете использовать аналогичный подход в Zsh; просто замените бить с zsh .

как найти скрытую шпионскую камеру

Соображения при выборе между Zsh и Bash

  • Совместимость и портативность : Bash является оболочкой по умолчанию во многих системах на базе Unix. Это делает его более безопасным выбором для кроссплатформенных сценариев. Если вам нужно, чтобы ваши сценарии запускались на широком спектре систем без изменений, Bash — лучший вариант.
  • Сложность сценария и расширенные возможности : Zsh предоставляет расширенные функции, такие как ассоциативные массивы, расширенные шаблоны подстановки и расширенное расширение параметров. Это упрощает сложные задачи написания сценариев. Если ваши сценарии требуют расширенных манипуляций со строками или структурами данных, Zsh — лучший выбор.
  • Сообщество и экосистема плагинов : И у Bash, и у Zsh есть активные сообщества, но у Zsh более сильное сообщество и обширная экосистема плагинов и тем. Если вы цените настройку, активное сообщество Zsh и поддержка плагинов могут стать значительным преимуществом.
  • Легкость обучения : Если вы новичок в написании сценариев оболочки, Bash — более доступная отправная точка. Он имеет обширную документацию и ресурсы, доступные для начинающих. Это облегчает изучение основ написания сценариев оболочки.

Автоматизация задач с использованием сценариев оболочки

Знание того, как автоматизировать задачи с помощью сценариев оболочки, имеет большое значение. Вы можете автоматизировать повторяющиеся задачи и сэкономить много времени.

Вы также можете использовать эти сценарии для управления учетными записями пользователей, мониторинга системных ресурсов, резервного копирования данных и выполнения планового обслуживания. Если они написаны тщательно, они также могут снизить вероятность человеческой ошибки.