LINUX.ORG.RU

История изменений

Исправление papin-aziat, (текущая версия) :

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

Я имел в виду вынос мозга с переключением между BRE & ERE, когда выясняется, что ERE означает extended, но придётся кое-что экранировать из BRE, а потом выясняется, что BRE умеет всё то же самое, только надо экранировать кое-что из ERE, и вишенкой на торте, когда sed (который умеет только BRE) умеет в обратные ссылки… Сидишь и думаешь, и какой же из них таки достоин имени extended… Ладно, это почти шутка, а реально странно, что в результате ты должен хорошо помнить в какой функции или программе какой диалект, а если есть возможность выбирать, то помнить ключи, которые переключают диалект, и учитывая, что писать надёжные регулярные выражения само по себе непросто, то такая подстава с экранированиями выглядит как подстава уровня бог.

Так всё башескриптование из таких заклинаний и состоит.

Мне больше понравился термин «идиомы» :-)

Везде перменная — это переменная. Если хочется поток, то его можно организовать явно. И только тут сиди да гадай echo $x тебе строку на печать выведет или диск отформатирует.

Насколько я помню из Паскаля и Си, там переменные имеют строгий тип и типов этих несколько. А в баше всё проще — это всегда строка, точка. Да, можно застолбить числовые и даже более простым синтаксисом ими манипулировать, но, как я понял, в практику это не пошло (а нафига?). Массивы (списки) — просто индексированные строки, а ассоциативные (хеши) — словари из двух строк. Классно же!

Ничего гадать не надо, ты всегда получаешь поток (я могу неграмотно выжаться, помнишь?) символов и сам решаешь как его подать с одного конца на другой — в виде строки или слова. Дальше в дело вступает принимающая сторона. И пока я знаю только одну особенность, когда позиционные параметры и массивы, которые подаются целиком, можно подать тремя способами: $*/$@, ${foo[*]}/${foo[@]} — строка; "$@", "${foo[@]}" — строка, разбитая на (соответствующие) слова; "$*", "${foo[*]}" — слово.

Т.е. ext-program вызывается, но результат её работы — простая строка, с которой дальше мы спокойно работать, не ожидая, что в каких-то выражениях она как-то хитро проинтерпретируется.

Дык она и есть простая строка, всегда, гарантированно, но интерпретирует-то её принимающая программа, к ней и претензии стало быть. Если вываливаешь из ведра прямо в командную строку, то наверное лучше в отдельный контейнер, если не уверен в содержимом, или отдельными порциями в случае поз. параметров или массивов, когда надо ударить по рукам, чтоб не трогала :-)

Исходная версия papin-aziat, :

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

Я имел в виду вынос мозга с переключением между BRE & ERE, когда выясняется, что ERE означает extended, но придётся кое-что экранировать из BRE, а потом выясняется, что BRE умеет всё то же самое, только надо экранировать кое-что из ERE, и вишенкой на торте, когда sed (который умеет только BRE) умеет в обратные ссылки… Сидишь и думаешь, и какой же из них таки достоин имени extended… Ладно, это почти шутка, а реально странно, что в результате ты должен хорошо помнить в какой функции или программе какой диалект, а если есть возможно выбирать, то помнить ключи, которые переключают диалект, и учитывая, что писать надёжные регулярные выражения само по себе непросто, то такая подстава с экранированиями выглядит как подстава уровня бог.

Так всё башескриптование из таких заклинаний и состоит.

Мне больше понравился термин «идиомы» :-)

Везде перменная — это переменная. Если хочется поток, то его можно организовать явно. И только тут сиди да гадай echo $x тебе строку на печать выведет или диск отформатирует.

Насколько я помню из Паскаля и Си, там переменные имеют строгий тип и типов этих несколько. А в баше всё проще — это всегда строка, точка. Да, можно застолбить числовые и даже более простым синтаксисом ими манипулировать, но, как я понял, в практику это не пошло (а нафига?). Массивы (списки) — просто индексированные строки, а ассоциативные (хеши) — словари из двух строк. Классно же!

Ничего гадать не надо, ты всегда получаешь поток (я могу неграмотно выжаться, помнишь?) символов и сам решаешь как его подать с одного конца на другой — в виде строки или слова. Дальше в дело вступает принимающая сторона. И пока я знаю только одну особенность, когда позиционные параметры и массивы, которые подаются целиком, можно подать тремя способами: $*/$@, ${foo[*]}/${foo[@]} — строка; "$@", "${foo[@]}" — строка, разбитая на (соответствующие) слова; "$*", "${foo[*]}" — слово.

Т.е. ext-program вызывается, но результат её работы — простая строка, с которой дальше мы спокойно работать, не ожидая, что в каких-то выражениях она как-то хитро проинтерпретируется.

Дык она и есть простая строка, всегда, гарантированно, но интерпретирует-то её принимающая программа, к ней и претензии стало быть. Если вываливаешь из ведра прямо в командную строку, то наверное лучше в отдельный контейнер, если не уверен в содержимом, или отдельными порциями в случае поз. параметров или массивов, когда надо ударить по рукам, чтоб не трогала :-)