Использование строк

Мы уже знаем как работает развертывание строк. Нам также известно, что при развертывании строки, мы можем получить несколько разных строк. Например, при развертывании подстановки по шаблону, подстановка будет заменена на список файлов, каждый из которых будет передан команде в виде отдельного аргумента.

А что если нам нужно передать аргумент, содержащий символы пробела и переноса строк? Рассмотрим простой пример. Воспользуемся командой cal для вывода календаря.

Результат отображен аккуратно в виде таблички по дням недели, похожей на обычный календарь.

Результат работы команды cal

Теперь подставим результат при помощи развертывания в команду echo, которая выводит каждый переданный ей аргумент.

Результат выглядит не так красиво. Мы потеряли все переносы строк и «лишние» пробелы.

Результат вывода команды cal через echo

Все дело в том, что строки отделяются друг от друга пробелами, так называемыми символами переноса строк и табуляции. Результатом развертывания стало несколько строк, разделенных пробелами, которые были переданы в команду echo как несколько аргументов.

Рассмотрим второй пример.

Мы потеряли символ валюты и первую цифру нашей «суммы покупки». Здесь сработало развертывание переменных. Но ведь нам же может понадобится вывести символ доллара. Так как же быть? Выход есть.

Различные специальные символы воспринимаются как управляющие символы, а не как часть строки. Например, символ пробела разделяет аргументы, знак доллара ($) используется при развертывании подстановок, перенос строки указывает конец команды.

Экранирование символов

Различные специальные символы воспринимаются как управляющие символы, а не как часть строки. Например, символ пробела разделяет аргументы, знак доллара ($) используется при развертывании подстановок, перенос строки указывает конец команды.

Чтобы использовать специальные символы, их можно экранировать специальным символом «\» (обратная косая черта).

В этот раз в строке все наши пробелы и остались, а символ валюты не был воспринят развертывание переменной. При вводе команды в конце первой строки (перед нажатием Enter) мы поставили символ экранирования, поэтому Linux Shell не стал исполнять команду сразу, а предложил ее продолжить на второй строке. Это очень удобно при написании длинных инструкций (например, команда с множеством аргументов). Мы можем разбить строку на несколько в нужных нам местах, что сделает команду читаемой. В основном данный прием используется при написании Shell скриптов. Очень важно сделать его читаемым и понятным, чтобы в будущем не тратить время пытаясь вспомнить, что мы написали.

Но как же быть с развертыванием? Например, если мы желаем, чтобы результат развертывания был воспринят единым аргументом? И для этого есть простое решение 🙂

Двойные кавычки

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

Как мы видим внутри двойных кавычек работает развертывание строк. Но разворачиваются лишь подстановки, начинающиеся с символа «$» или с обратными одинарными кавычками.

Подстановки файлов по шаблону или подстановки последовательностей воспринимаются как обычные строки без их развертывания.

Чтобы развернуть последовательность, нужно вынести ее за пределы кавычек.

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

Одинарные кавычки

В строке или части строки, помещенной в одинарной кавычке, полностью подавляется развертывание подстановок. Текст, помещенный в одинарные кавычки остается неизменным.

Одинарные кавычки удобны для записи данных, в которых часто присутствуют специальные символы. Достаточно всю строку обернуть в одинарные кавычки и можно почти ни о чем не беспокоиться 🙂

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *