LINUX.ORG.RU

Где можно увидеть полный перечень башизмов (bash-специфичных конструкций)?

 ,


1

3

Привет.

Появилась задача написать чистый sh-скрипт. Но я всегда пишу на bash, и поэтому уже не понимаю, где bash-специфичная конструкция, а где sh.

Где можно увидеть полный перечень конструкций, которые поддерживаются только в bash и не поддерживаются в POSIX sh?

★★★★★

Последнее исправление: Kroz (всего исправлений: 1)
Ответ на: комментарий от dataman

https://mywiki.wooledge.org/Bashism

Прям как сегодняшная политота: «ты фашист, нет ты фашист». Практически все описания содержат: «придумано в ksh/etc», но обзовём башизмом, почему, да потому что так принято так обзывать по дискурсу. Если бы не такие «башизмы» во всех этих супер стандартных шелах никогда бы не появилось самое тривиальное, без которого оригинальный sh был убог до нельзя, хоть те же i=$((i+1)) или ${v*модификатор*}. Вернуть бы вас лет так на 30 назад и посмотреть как бы вы радостно пользовались теми sh-ами. Чем bash хорош, так тем, что таки выкинул на свалку истории c-shell-ы, то есть те, чем действительно можно было пользоваться в те времена, а не оригинальным sh, но совместимости с ними было вообще никакой, потому туда им и дорога.

vodz ★★★★★
()

На каком чистом? Мне как-то довелось сопровождать систему одного немаленького банка, где по хитрому расписанию(Control-M) дёргались тысячи разнообразных скриптов. Там были разные версии разных интерпретаторов: sh, csh, ksh, bash, tcsh и всё это разных версий. Для каждого из этих шеллов были написаны свои библиотеки функций и из одного шелла часто вызывались другие. Единственный способ понять, как писать на каком из них - читать ман к нему и изучать имеющиеся библиотеки.

shell-script ★★★★★
()
Ответ на: комментарий от mord0d

Утилитка сразу носом ткнёт в башизм и ссылку на объяснение (на сайте утилитки) даст.

Я у тебя прошу учебник русского языка, а ты говоришь «пиши как получится, а потом отдавай на проверку. И если там будет соответствующая конструкция, то тебе объяснят. А если не будет - значит не выиграл в лотерею, ждите следующего раза».

Мне б знаний…

Но я на сайтике нашел перечень правил. Почитаю их. Так что тебе тоже спасибо, мил человек.

Kroz ★★★★★
() автор топика

поставь в начале своего скрипта #!/bin/sh и отлаживайся себе на здоровье, оно тебя сразу и посылать будет лесом, если что-то не то напишешь

stalkerbss
()
Ответ на: комментарий от Kroz

Кроме того, можешь поставить dev-util/checkbashisms, но там можно только прочитать перловый исходник, никакой документации, а сам он погребён где-то в недрах дебиановских devscripts и lintian.
ShellCheck гораздо полезнее.
Впрочем, написание на «чистом POSIX» еще не гарантирует реальной портабельности, встречаются нюансы, особенно с zsh, ksh, да даже и с dash(!).

ABW ★★★★★
()
Ответ на: комментарий от Kroz

И если там будет соответствующая конструкция, то тебе объяснят.

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

А если не будет

Когда не будет, тогда и приходи =)

t184256 ★★★★★
()

Привет.

Появилась задача написать чистый sh-скрипт. Но я всегда пишу на bash, и поэтому уже не понимаю, где bash-специфичная конструкция, а где sh.

Где можно увидеть полный перечень конструкций, которые поддерживаются только в bash и не поддерживаются в POSIX sh?

Привет.

Полный - только у Чета: https://git.savannah.gnu.org/cgit/bash.git/tree/

kindof
()