LXF142:DrBrown2
|
|
|
Прикрыться экраном
- Интервью с метасимволами № 3: обратный слэш.
До начала своих изысканий я воображал, что привычное амплуа обратного слэша – быть экранирующим символом. В конце концов, он выполняет именно эту функцию в оболочке, в регулярных выражениях, в Awk и Perl и во многих других случаях. Однако оказалось, что на этом его жизнь не заканчивается.
Начнем с очевидных задач этого символа. С первыми двумя обратными слэшами я повстречался в простой команде оболочки:
$ cp January\ Sales\ Figures ~/summaries
«Мы обычные экранирующие символы, – объяснили они. – Мы нейтрализуем магическое значение пробелов, и они становятся просто частью имени файла. Без нас оболочка посчитала бы, что здесь три отдельных аргумента».
Следующий пример скрывался в самом конце длинной строки, как непослушный ребенок, которого поставили в угол:
$ slapcat -f schema_convert.conf -F /tmp/ldif_output -n0 -s \ “cn={12}kerberos,cn=schema,cn=config” > /tmp/cn=kerberos.ldif
«Я символ продолжения строки, – похвастался он. – Благодаря мне команда может длиться несколько строк». Жаль прокалывать его мыльный пузырь, но… он – все тот же символ экранирования, нейтрализующий действие следующего за ним символа перевода строки, точно так же, как в предыдущем примере было с пробелами.
Следующий пример неожиданно появился в классической программе Hello World. Это пример на C, но почти во всех остальных языках он будет выглядеть примерно так же:
printf(“Hello World!\n”);
Я пытался поговорить с обратным слэшем наедине, но он настоял на присутствии n. «Мы escape-последовательность, – сказали оба хором. – Мы представляем символ новой строки». Существуют и другие: \t – символ табуляции, а \a — символ сигнала или звонка. (Кстати, кто-нибудь помнит те времена, когда в телетайпах был настоящий колокольчик, звонивший при приеме символа с ASCII-кодом 007? Сегодня ваш терминал скорее всего лишь походя пискнет.) Также есть последовательность \\, которая соответствует одиночному обратному слэшу и иллюстрирует загон самого себя в синтаксический угол.
Впрочем, вернемся к нашей теме. Из беседы с \n я узнал, что ролей у обратного слэша две: нейтрализовать значение следующего символа или активизировать его. Кое-что в любом случае стало ясно. Обратный слэш сам по себе практически ничего не означает. Почти всегда он связан со следующим за ним символом.
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
Другой пример этого изменения в поведении я встретил в следующем регулярном выражении:
$ grep ‘\<ram\>’ literature.txt
Здесь, по словам обратных слэшей, они активизируют специальное значение символов < и > – «начало слова» и «конец слова» соответственно. Таким образом, этому регулярному выражению соответствуют строки, содержащие отдельное слово ram, а не “program” или “ramble”.
Регулярные выражения открывают для обратных слэшей большие возможности. Взгляните на этот пример:
$ grep ‘^\([a-z]\)\([a-z]\)[a-z]\2\1$’ /usr/share/dict/words
Здесь первые четыре слэша активируют круглые скобки, ( и ), обрамляющие части регулярного выражения. Два последних обратных слэша создают обратные ссылки, так что \n отвечает тому, чему соответствует n-я сгруппированная часть регулярного выражения. Данный пример находит палиндромы из пяти букв, такие как “level ” и “solos”.
Сложные рокировки
А теперь – о действительно хитрых штуках. В базовых регулярных выражениях, как в предыдущем примере, сама скобка ( означает собственно скобку, а \( производит группировку. А в расширенных регулярных выражениях сама скобка ( производит группировку, а \( означает собственно скобку. Если вас это не смущает, то вы не понимаете, что происходит!
Итак, существуют «деактиваторы» и «активаторы». Но каждый попавшийся мне обратный слэш был прикреплен к следующему за ним другому символу. Одиночек я не встречал.
Наконец я забрел в клуб в сомнительной части города, где обнаружил обратных слэшей, которые работали сами по себе. Сгорбившись за стойкой бара, они топили свою печаль в синтаксическом сахаре. Разговорить их было нелегко, но один в результате раскололся. «У нас была благородная работа, – всхлипнул он, – ввод тэгов разметки в Tex. Но нас сократили. Мы пытались найти работу в URL-адресах и разметке HTML и XML, но всё самое лучшее забрали прямые слэши. Теперь мы просто разделители. Работаем на М Большое».
В самом темном углу бара сидел особо мрачный субъект – он нанялся в Visual Basic оператором целочисленного деления. Впрочем, не судите его слишком строго. Всем надо как-то зарабатывать на жизнь.
Откуда он, обратный слэш?
Обратный слэш – один из тех символов, которые попадаются в компьютерном коде, но не в письменном английском языке. Это сравнительно новый пацан в нашем дворе. В набор компьютерных символов – в частности, в ASCII – его (вместе с круглыми скобками) добавил покойный Боб Бемер [Bob Bemer] в 1961 году (см. http://www.bobbemer.com/BAC-SLASH.HTM). Зато прямой слэш явно восходит ко временам Древнего Рима.