Читать книгу 📗 "UNIX — универсальная среда программирования - Керниган Брайан Уилсон"
3.6 Переменные языка
shell
Подобно большинству языков программирования,
shell
$1
shell
PATH
НОМЕ
PATH
$PATH
$1
$1
Если забыть о позиционных параметрах, переменные языка
shell
$ PATH=:/bin:/usr/bin
означает присваивание, изменяющее список каталогов в процессе поиска. До и после знака равенства не должно быть пробелов. Присваиваемое значение должно выражаться одним словом, и его следует взять в кавычки, если оно содержит метасимволы, которые не нужно обрабатывать. Значение переменной выбирается, если предварить имя знаком доллара:
$ PATH=$PATH:/usr/games
$ echo $PATH
:/usr/you/bin:/bin:/usr/bin:/usr/games
$ PATH=:/usr/you/bin:/bin:/usr/bin
$
He все переменные имеют специальное значение для интерпретатора. Можно создавать новые переменные, присваивая им значения. По традиции переменные, имеющие специальное значение, обозначаются прописными буквами, а обычные переменные — строчными. Типичным примером использования переменных является хранение в них длинных строк, таких, как имена файлов:
$ pwd
/usr/you/bin
$ dir=`pwd`
$ cd /usr/mary/bin
$ ln $dir/cx .
$ ...
$ cd $dir
$ pwd
/usr/you/bin
$
Встроенная в интерпретатор команда
set
echo
$ set
HOME=/usr/you
IFS=
PATH=:/usr/you/bin:/bin/:/usr/bin
PS1=$
PS2=>
dir=/usr/you/bin
$ echo $dir
/usr/you/bin
$
Значение переменной связано с той копией интерпретатора, который создал ее, и автоматически не передается процессам — потомкам интерпретатора.
$ x=Hello
$ sh
$ echo $x
x не определено в порожденном интерпретаторе
$ ctl-d
$ echo $x
Hello
$
Это означает, что в командном файле нельзя изменить значение переменной, поскольку выполнением командного файла управляет порожденный интерпретатор:
$ echo 'x="Good bye"
> echo $x' >setx
$ cat setx
x="Good Bye"
echo $x
$ echo $x
Hello
$ sh setx
Good Bye
$ echo $x
Hello
$
Однако бывают ситуации, когда было бы полезно изменять переменные интерпретатора в командном файле. Очевидным примером является файл, добавляющий новый каталог к вашей переменной
PATH
'.'
.profile
$ cat /usr/you/bin/games
PATH=$PATH:/usr/games
$ echo $PATH
:/usr/you/bin:/bin:/usr/bin
$ . games
$ echo $PATH
:/usr/you/bin:/bin:/usr/bin:/usr/games
$
Поиск файла для команды
'.'
PATH
bin
Когда используется команда
'.'
$1
$2
Конец ознакомительного фрагмента Купить полную версию книги