Правила применения кавычек в shell



В языке shell кавычки оказывают существенно влияние на процесс интерпретации командных строк.

 

Одинарные ' ' и двойные " " кавычки

Одинарные и двойные кавычки используются в программе для экранирования специальных символов и пробелов.

Если переменная заключена в двойные кавычки, то все символы за исключением $, \ и ` будут восприниматься буквально, а указанные символы сохраняют свое специальное значение.

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

Так результатом выполнения команд

$ echo 'per: ${maxi}'

$ echo "per: ${maxi}"

будет

per: ${maxi}

и

per: 10

 

Обратные кавычки ` `

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

Например, команда

$ echo `date`

позволит вывести на экран дату в формате представления команды date

пятница, 13 октября 2017 г. 02:00:12 (MSK)

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

$ Todaydate=`date`

$ echo $Todaydate

пятница, 13 октября 2017 г. 02:00:12 (MSK)

Допускается комбинация кавычек в рамках одной команды:

$ echo " Today is `date`. "

Today is пятница, 13 октября 2017 г. 02:00:12 (MSK).

 

Конвейерная обработка текстовой информации

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

Рис. 1.5. Организация передачи данных в конвеере команд

В командной строке программный канал обозначает символ вертикальной черты | между командами с пробелом слева и справа от него.

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

Ниже приведен пример, который демонстрирует следующая командная строка, где конвейер команд cat, tr и grep позволяет определить как часто упоминается слово физика (physic) в текстовом файле study:

$ cat study | tr –cs A-Za-z ‘\012’ | grep –c physic

В этом конвейере команда cat обеспечивает стандартный вывод файла study, который через первый программный канал передается на стандартный ввод команды транслитерации tr. Опции cs заставляют ее сжимать все не буквы (символы вне литерного диапазона A - Z и a - z) первого аргумента в перевод строки, заданный его кодом ASCII во втором аргументе. В результате получится поток строк из одного слова, который через второй программный канал поступает на стандартный ввод команды grep. Она реализует поиск строк стандартного ввода по заданному образцу. В данном случае опциязаставляет ее ограничиться подсчетом строк, содержащих сочетание physic, заданное ее аргументом. Результат этого подсчета отображается через поток стандартного вывода.


Дата добавления: 2020-01-07; просмотров: 166; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!