]> Sergey Matveev's repositories - stargrave-blog.git/commit
zsh vs bash, снова
authorSergey Matveev <stargrave@stargrave.org>
Wed, 20 Oct 2021 07:18:40 +0000 (10:18 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Wed, 20 Oct 2021 07:40:22 +0000 (10:40 +0300)
commit1292571d0fe2410bf8c6067f15d98d8de73b3d87
tree4b825dc642cb6eb9a060e54bf8d69288fbee4904
parent1930160d2a1f5fc7072c1326ba93a229dcd54e33
zsh vs bash, снова

https://www.arp242.net/why-zsh.html
https://tiswww.case.edu/php/chet/bash/POSIX
Хорошие примеры убогости bash-а. Несколько лет назад я всё ещё продолжал
говорить что меня не волнуют более удобные возможности программирования
на zsh, ибо всё равно скрипты писал и буду писать на POSIX shell.
Поэтому программирование (скрипты) и интерактивное удобство могут
разительно отличаться (как tcsh по умолчанию в FreeBSD, вообще не POSIX
или Bourne совместимый даже отдалённо). Но когда я прочувствовал
насколько же удобнее работать с переменными где не нужно париться о
корректном экранировании переменных, то я уже не мало своих скриптов
переписал на pure zsh, в котором и вызовов внешних команд стало сильно
меньше.

Читая эту статью я и не подозревал насколько же bash мало всего умеет!
Выходит, я совершенно его не знал. Ад с quoteing-ом как был, так и
остался в нём, ничуть не делая ситуацию лучше относительно POSIX shell.
Никаких модификаторов переменных в нём нет. Игнорирование чего-либо в
glob-е оказывается есть, но явно не шибко удобно написанное -- я поэтому
никогда и не встречал чтобы кто-либо писал "!(*_test|f*).go" в bash.
Подстановки параметров тоже нет. Да почти всё (кроме работы с float-ами)
я ежедневно использую в zsh, а в bash оказывается ничего из этого нет!
Оказывается некоторые фичи присутствовали в csh или ksh ещё со времён их
рождения.

Автор верно замечает что нет ни одной причины почему bash до сих пор
используется, кроме того факта, что изначально это всё было в GNU ОС и
он там был по умолчанию. Come on, уже давно многие люди не используют ни
GNU, ни нет проблем со свободными лицензиями всяких zsh. Плюс у zsh
только curses и libc из зависимостей и он реально маленький и
компактный, относительно остальных интерпретаторов. И верно замечено что
в zsh можно писать более портируемый код, ибо меньше сторонних
инструментов будет использовано: тот же grep/sed попробуй написать чтобы
он работал в разных реализациях. Помню что единственный способ
использовать портируемо stat команду это... не использовать её, а
вызывать perl. Но вот в zsh есть свой zstat модуль, который бы мог быть
отличной альтернативой.