История изменений
Исправление 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 вызывается, но результат её работы — простая строка, с которой дальше мы спокойно работать, не ожидая, что в каких-то выражениях она как-то хитро проинтерпретируется.
Дык она и есть простая строка, всегда, гарантированно, но интерпретирует-то её принимающая программа, к ней и претензии стало быть. Если вываливаешь из ведра прямо в командную строку, то наверное лучше в отдельный контейнер, если не уверен в содержимом, или отдельными порциями в случае поз. параметров или массивов, когда надо ударить по рукам, чтоб не трогала :-)