затем посмотри какой синтаксис в rc ( подсказка - оба варианта отброшено)
в непосредственном использовании когда нет вложенных обращений разницы нет .
когда вложенные разименования_цитат то удобней $( c ) ибо зрительнее легче отличить открывающие от закрывающих - однако в обоих случаях гемор ибо лавина экранирований.
работает. Но не в каждом. Bash --posix только разночтения обрабатывает по POSIX, новые фишки обрабатывает как gnu-bash.
Дык, я слыхал, что sh полностью posix-совместим.
да. Если в стандарте сказано «вода мокрая», то вода мокрая. А если в стандарте НЕ сказано «вода мокрая», то вода всё равно может быть мокрой. А может и не быть. AFAIK вот та хрень, что в роутерах (busybox), так не умеет. Ну и вообще много разных шеллов есть, я за все не стану говорить.
Когда говорят шелл, без уточнения, какой именно, подразумевается sh, насколько я понимаю. А за все интерпретаторы естественно разговора не было, так сюда и интерпретатор питона можно приплести.
дык во многих дистрах /bin/sh это ссылка на bash, которая работает как bash --posix. Т.е. обычно все(почти) башизмы работают и в sh. Кроме тех, которые явно противоречат POSIX(а таких мало, и мне с ходу и не вспомнить).
Т.е. есть некий POSIX стандарт, а есть расширения(bash например). AFAIK `` в стандарте есть, а в баше тоже ессно есть, хоть и «старый стиль».
Да я про то, что мой sh работает как баш, но выполняю то я в sh. По дефолту то там bash, но когда я печатаю sh, вроде начинается новая сессия. И хоткеи дефолтные, vi-like, перестают работать. Но в /usr/bin/ лежит сразу и sh.exe и bash.exe. может sh.exe — это тупо копия bash.exe, я хз.
Да я про то, что мой sh работает как баш, но выполняю то я в sh.
если bash запускать как sh, он работает примерно как bash --posix.
If bash is invoked with the name sh, it tries to mimic the startup behavior of historical
versions of sh as closely as possible, while conforming to the POSIX standard as well. When
invoked as an interactive login shell, or a non-interactive shell with the --login option,
it first attempts to read and execute commands from /etc/profile and ~/.profile, in that
order. The --noprofile option may be used to inhibit this behavior. When invoked as an
interactive shell with the name sh, bash looks for the variable ENV, expands its value if it
is defined, and uses the expanded value as the name of a file to read and execute. Since a
shell invoked as sh does not attempt to read and execute commands from any other startup
files, the --rcfile option has no effect. A non-interactive shell invoked with the name sh
does not attempt to read any other startup files. When invoked as sh, bash enters posix
mode after the startup files are read.
нет, не мог. Это лютый башизм, который не в каждом баше сработает. Это ассоциативный массив. Если такое и есть в других шеллах, то синтаксис наверняка другой. Хотя я тоже хз.
У тебя в слаке оба интерпретатора? Если да, то проветь свою команду у себя в sh, пожалуйста, чтобы уже на сто процентов знать. А то какая то муть получается. Лежат 2 экзешника, diff показывает что они разные, по-логике sh.exe должен быть оригинальным шеллом.
diff'ать надо сырцы. А exe и не обязаны совпадать, зависит от опций сборки, компилятора, погоды на Марсе(да, собираем в несколько потоков, потому результат зависит от Марса. С т.з. diff)
ты лучше попробуй sh.exe --version
$ sh --version
GNU bash, version 4.2.45(2)-release (i486-slackware-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
$ diff <(sh --version) <(bash --version)
/* ничего не написала */
Да, ты прав, GNU Bash, version 4.1.10... Вот уроды, нагородили костылей, без стакана не разберешься, прям как в офтопике. А еще че-то лапочут за прототу unix-way. Ага, все просто, тока когда стакан есть :)
Вот уроды, нагородили костылей, без стакана не разберешься
ну я пишу в скриптах всегда #!/bin/bash в первой строке. Но многие пишут #!/bin/sh, или вообще ничего не пишут. Для них нужны костыли. Можешь удалить sh.exe, если ты ВСЕГДА делаешь как я. ☺
И да, в маздае нормальных симлинков нет, потому приходится делать два exe'шника. Также в маздае как-то через задницу программа может прочитать своё имя, потому-то exe'шники разные. Раньше всё было хорошо, но вирусы этим пользовались, теперь там костыли сделали. Старые вирусы сломались, вирусы написали новые, но костыль так и остался. Страдай.
Мораль: если система кривая by design, то костыли её не исправляют, а только портят.
Обычно ash используется при загрузке Linux в однопользовательском режиме, в защищённом режиме или при загрузке дискетных версий Linux. Также с её помощью можно проверять скрипты на sh‐совместимость. В NetBSD в качестве /bin/sh работает именно ash.
В cygwin он тоже есть. А чем он отличается от Ъ-sh?
Стандарт — это то, что описано в документе, например POSIX, а имплементация — это конкретная программа, более или менее соответствующая этому документу.
bash сделан для интерактивной работы и следует стандарту на sh только когда это удобно для практического применения
ash следан для легковесности и ставит своей целью соответствие стандарту. И, насколько я знаю, в busybox тоже ash интегрирован.
однако при прочих равных rc [будь оно везде ( ну поставить можно, однако чужие скрипты в массе на баше) ] - проще в понимании и использовании ибо позже было запроектированно с более полным пониманием , что нужно от шелла и оно не распухло - чем грешат все гну да и бсд тулзы - ибо добавление фич это энтропия.
есть полезное наблюдение - что если абстракция «всё есть файл» оказалась экономически провальной , значит вычислительные ресурсы ещё недостаточно подешевели относительно стоимости времени программиста - оказывается специализированое знание сокетов всё ещё выгодно , как знание наизусть когда-то различий промеж терминалов.
как и миникс ага.
однако когда я смотрю сырцы одной и той же утилиты во фряхе , в гну и в плане , то самым «преждевременно оптимизированным» вариантом оказывается .... - эволюция ага.
есть полезное наблюдение - что если абстракция «всё есть файл» оказалась экономически провальной
с какого перепугу «провальной»?
однако когда я смотрю сырцы одной и той же утилиты во фряхе , в гну и в плане , то самым «преждевременно оптимизированным» вариантом оказывается .... - эволюция ага.
ты договаривай. Я сырцов плана9 не видел. Зачем оно мне?