UNIX — универсальная среда программирования - Керниган Брайан Уилсон Страница 33

Тут можно читать бесплатно UNIX — универсальная среда программирования - Керниган Брайан Уилсон. Жанр: Компьютеры и Интернет / Интернет. Так же Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте «WorldBooks (МирКниг)» или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
UNIX — универсальная среда программирования - Керниган Брайан Уилсон

UNIX — универсальная среда программирования - Керниган Брайан Уилсон краткое содержание

Прочтите описание перед тем, как прочитать онлайн книгу «UNIX — универсальная среда программирования - Керниган Брайан Уилсон» бесплатно полную версию:

UNIX — универсальная среда программирования - Керниган Брайан Уилсон читать онлайн бесплатно

UNIX — универсальная среда программирования - Керниган Брайан Уилсон - читать книгу онлайн бесплатно, автор Керниган Брайан Уилсон

Таблица 3.1: Метасимволы shell

При таком количестве метасимволов интерпретатора необходимо иметь возможность экранировать специальный символ от интерпретации. Самый простой и надежный способ экранирования — заключить его в апострофы:

$ echo '* * *'

* * *

$

Можно также использовать кавычки "...", но интерпретатор на самом деле "заглядывает" внутрь этих кавычек в поиске метасимволов $, '...' и \, так что не применяйте "...", если только вам не требуется определенным образом обработать строку в кавычках.

Еще одну возможность дает ввод обратной дробной черты перед каждым символом, который вы хотите закрыть от интерпретатора, например:

$ echo \*\*\*

Хотя строка \*\*\* не похожа на английское слово, в терминологии языка shell это слово, ибо им является любая последовательность символов, воспринимаемая интерпретатором как целое, включая даже пробелы, если они взяты в кавычки.

Кавычки одного вида могут экранировать кавычки другого вида:

$ echo "Don't do that!"

Don't do that!

$

и могут не заключать в себе весь аргумент:

$ echo x'*'y

x*y

$ echo '*'A'?'

*А?

$

В последнем примере команда echo получает один аргумент, не содержащий апострофов, так как, сделав свое дело, апострофы исчезают. Строки в кавычках могут содержать символы строк:

$ echo 'hello

> world'

hello

world

$

Символ > является вторичным приглашением интерпретатора, которое выдается, если ожидается продолжение ввода для завершения команды. В этом примере апостроф в первой строке должен быть уравновешен другим апострофом. Вторичное приглашение интерпретатора хранится в переменной PS2; его можно изменить по своему вкусу.

Во всех приведенных выше примерах экранирование специальных символов предохраняет их от интерпретации. Команда

$ echo x*y

выдает все имена файлов, начинающиеся с x и кончающиеся y. Как обычно, команда echo ничего "не знает" ни о файлах, ни о метасимволах; интерпретация *, если она требуется, осуществляется shell.

Что произойдет, если ни один файл не будет соответствовать шаблону? Интерпретатор просто пропустит строку, как если бы она была взята в кавычки, а не выразит вам свое неудовольствие (как было принято в ранних версиях). Конечно, не следует рассчитывать на это свойство, но его можно использовать, чтобы узнать о существовании файлов, соответствующих шаблону:

$ ls x*y

x*y not found Сообщение ls: таких файлов нет

$ >xyzzy      Создать файл xyzzy

$ ls x*y

xyzzy         Файл xyzzy соответствует x*y

$ ls 'х*y'

x*y not found ls не интерпретирует *

$

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

$ echo abc\

> def\

> ghi

abcdefghi

$

Обратите внимание на то, что символ перевода строки отбрасывается, если перед ним стоит обратная дробная черта, но он остается, если взят в кавычки. Метасимвол # в программе на языке shell практически всюду используется в качестве комментария; если слово начинается с #, остаток строки игнорируется:

$ echo hello#there

hello

$ echo hello # there

hello # there

$

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

Упражнение 3.2

Объясните результат выполнения команды

$ ls .

Некоторые дополнительные сведения о команде echo

Команда echo выдает заключительный символ перевода строки, даже если на это нет явного запроса. Разумной и, возможно, более корректной была бы такая реализация команды echo, при которой вывод соответствовал бы только запросу. Добиться этого легко, если потребовать от интерпретатора выдачи приглашения:

$ правильное эхо введенная команда:

Введенная команда: $ Нет завершающего перевода строки

Однако при таком решении в самой распространенной ситуации, когда перевод строки нужен, он не подразумевается по умолчанию и требует дополнительного ввода:

$ правильное эхо 'Привет!

>'

Привет!

$

Поскольку команда должна по умолчанию выполнять наиболее часто встречающееся действие, настоящее эхо автоматически добавляет перевод строки.

Но как быть, если это нежелательно? В седьмой версии системы команда echo имеет единственный флаг -n, который подавляет последний символ перевода строки:

$ echo -n Enter a command:

Enter a command: $ Приглашение на той же строке

$ echo -

-                  Только - является специальным случаем

$

Существует одна маленькая хитрость в случае получения эха от -n, за которым должен следовать символ перевода строки:

Перейти на страницу:
Вы автор?
Жалоба
Все книги на сайте размещаются его пользователями. Приносим свои глубочайшие извинения, если Ваша книга была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.
Комментарии / Отзывы
    Ничего не найдено.