Метасимволы командного интерпретатора
Ряд символов, как было описано выше, имеют для командного интерпретатора специальное значение - это метасимволы. Они описаны в табл. 23.
Метасимволы не входят в команды и обрабатываются в несколько проходов до начала выполнения реальных программ.
Таблица 23. Метасимволы командного интерпретатора
Метасимвол | Интерпретация |
> | prog>file - переключить стандартный выходной поток в файл |
>> | prog>>file - добавить стандартный выходной поток к файлу |
< | prog<file - извлечь стандартный входной поток из файла |
| | p1 | p2 - передать стандартный выходной поток p1 как стандартный входной поток p2 |
<<str | "Документ здесь": стандартный входной поток задается в последующих строках до строки, состоящей только из символов str. По умолчанию в данных интерпретируются метасимволы \, $ и ``. Если необходимо предотвратить в данных интерпретацию всех метасимволов, необходимо экранировать строку str, предварив обратной косой или взяв в двойные или одиночные кавычки. |
* | Задает в имени файла любую строку из нуля или более символов |
? | Задает любой символ в имени файла |
[abc] | Задает любой символ из [abc] в имени файла, при этом допускаются диапазоны, задаваемые при помощи дефиса -. Если первым символом после [ является !, с этой конструкцией сопоставляется любой символ, не входящий в квадратные скобки. |
; | Разделитель команд: p1; p2 - выполнить p1, затем p2. |
&
Выполняет предшествующую команду в фоновом режиме | |
`...` | Инициирует выполнение команд(ы) в ...; `...` заменяется на полученный в результате выполнения стандартный выходной поток |
(...) | Инициирует выполнение команд(ы) ... в порожденном командном интерпретаторе |
$1,$2,...$9 | Заменяются аргументами командного файла |
$var | Значение переменной (ключевого параметра) var в сеансе |
${var} | Значение var: исключает коллизии в случае конкатенации переменной с последующим текстом |
\ | \c - использовать непосредственно символ c, \перевод строки- отбрасывается |
'...' | Непосредственное использование того, что в кавычках |
"..." | Непосредственное использование, но после того, как будут интерпретированы метасимволы $, `...` и \ |
# | Начало комментария |
var=value | Присваивает значение value переменной var |
p1&&p2
Выполнить p1; в случае успеха выполнить p2 | |
p1p2 | Выполнить p1; в случае неудачи выполнить p2 |
Примечание
Большинство метасимволов будет рассматривается по ходу изложения. Здесь мы остановимся на тех из них, которые используются для генерации имен файлов и экранирования.
Перед выполнением команды каждое слово-аргумент команды просматривается в поисках метасимволов *, ? и [. Если в слове есть один из этих символов, слово рассматривается как шаблон (обратите внимание на синтаксические отличия от шаблонов ed). Такое слово заменяется отсортированными в алфавитном порядке именами файлов, соответствующих шаблону. Если ни одно их имен файлов не соответствует шаблону, слово оставляется без изменений. Символ . в начале имени файла или сразу после /, а также сам символ /, должны сопоставляться явно.
При таком количестве метасимволов интерпретатора необходимо иметь возможность экранировать специальный символ от интерпретации. Для этого можно использовать апострофы, кавычки или обратную косую. При этом кавычки одного вида могут экранировать кавычки другого вида. Обратите внимание, что кавычки "", в отличие от апострофов, не экранируют строку полностью - интерпретатор заглядывает внутрь кавычек в поисках $, `...` и \.
В кавычках могут содержаться переводы строк, пробелы, табуляции, символы ;, &, (, ), |, ^, < и >. Задавая имя файла в кавычках, можно создать файлы с такими нетривиальными символами в именах. Впрочем, делать это не рекомендуется, так как работать с ними будет явно неудобно.