Различные специальные символы, интерпретируемые shell
, такие, как <
, >
, |
, ;
и &
, не являются аргументами команд, запускаемых интерпретатором. Они управляют самим процессом запуска. Например,
$ echo Hello > junk
требует, чтобы интерпретатор запустил команду echo
с одним аргументом Hello
и поместил выходной поток в файл junk
. Строка > junk
не является аргументом команды echo
; она интерпретируется shell
, и echo
никогда ее "не увидит". На самом деле, данная строка может и не быть последней в командной строке:
$ > junk echo Hello
Это идентичный запуск, хотя и менее очевидный.
Упражнение 3.1
В чем состоит различие между следующими командами?
$ cat file | pr
$ pr
$ pr file
(С течением времени операция переключения <
потеряла свою связь с программными каналами; " cat file |
" считается более естественным, чем " < file
".)
Интерпретатор распознает еще ряд символов как специальные. Наиболее часто используется звездочка *
, указывающая, что нужно искать в каталоге имена файлов, у которых вместо *
может быть любая последовательность символов. Например,
$ echo *
есть не что иное, как некое подобие команды ls
. В гл. 1 мы не отметили, что во избежание проблем с именами '.'
и '..'
, которые присутствуют в любом каталоге, символы подстановки в именах файлов нельзя применять к именам файлов, начинающимся с точки. Правило таково: символы подстановки в именах файлов действуют на имена файлов, начинающихся с точки, только в том случае, если точка явно задана в шаблоне. Как обычно, "рассудительная" команда echo
прояснит ситуацию:
$ ls
.profile
junk
temp
$ echo *
junk temp
$ echo .*
. .. .profile
$
Символы со специальным значением, подобные *
, называются метасимволами . Существует множество метасимволов (в табл. 3.1 приводится их полный список, но некоторые символы мы обсудим только в гл. 5).
> |
prog > file — переключить стандартный выходной поток в файл |
>> |
prog >> file — добавить стандартный выходной поток к файлу |
< |
prog < file — извлечь стандартней выходной поток из файла |
| |
p1 | p2 — передать стандартный выходной поток p1 как стандартный выходной поток для p2 |
< |
"Документ здесь": стандартный выходной поток задается в последующих строках до строки, состоящей из одного символа str |
* |
Задает любую строку, состоящую из нуля или более символов, в имени файла |
? |
Задает любой символ в имени файла |
[ccc] |
Задает любой символ из [ccc] в имени файла (допустимы диапазоны, такие, как 0-9 или a-z ) |
; |
Завершает команды: p1; p2 — выполнить p1 , затем p2 |
& |
Выполняет аналогичные функции, но не ждет окончания p1 |
`...` |
Инициирует выполнение команд(ы) в ... ; `...` заменяется своим стандартным выводом |
(...) |
Инициирует выполнение команд(ы) в ... в порожденном shell |
{...} |
Инициирует выполнение команд(ы) в ... в текущем вызове shell (используется редко) |
$1, $2, ... |
Заменяются аргументами командного файла |
$var |
Значение переменной var в программе на языке shell |
${var} |
Значение var ; исключает коллизии в случае конкатенации переменной с последующим текстом (см. также табл. 5.3) |
\ |
\c — использовать непосредственно символ c , \ перевод строки отбрасывается |
'...' |
Означает непосредственное использование |
"..." |
Означает непосредственное использование, но после того, как $ , `...` и \ будут интерпретированы |
# |
В начале слова означает, что вся остальная строка рассматривается как комментарий (но не в седьмой версии) |
var=value |
Присваивает value переменной var |
p1 && p2 |
Предписывает выполнить p1 ; в случае успеха выполнить p2 |
p1 || p2 |
Предписывает выполнить p1 ; в случае неудачи выполнить p2 |
Таблица 3.1: Метасимволы shell
Читать дальше
Конец ознакомительного отрывка
Купить книгу