Позиционные переменные имеют вид – $n, где n – целое число. Позиционными они называются потому, что их номера соответствуют позициям аргументов. Интерпретатор shell автоматически присваивает значения следующим своим переменным:
$n – параметр в n–ой позиции;
$0 – имя вызываемой команды;
$1 – имя первого аргумента;
$2 – имя второго аргумента;
$9 – имя девятого аргумента.
Для доступа более чем к 9 аргументам применяется специальная команда shift.
$? – код завершения последней выполненной команды;
$$ – идентификационный номер процесса shell;
$! – идентификационный номер последнего запущенного интерпретатором shell фонового процесса;
$# – число параметров (аргументов), переданных в shell, исключая $0 (имя команды);
$* – содержит все разделенные пробелами позиционные параметры командной строки, начиная с $1. Здесь нет ограничения в 9 аргументов;
$– – показывает флаги, переданные в shell при его запуске или установленные командой set.
Эти переменные равнозначны переменным, создаваемым пользователем, но они могут быть установлены только интерпретатором shell.
Пример использования позиционных параметров и команды сдвига:
$ ls /etc /dev /usr /udd (Отработка команды)
$ echo $0 (Имя команды)
ls
$ echo $# (число аргументов)
$ echo $* (список исходных аргументов)
/etc /dev /usr /udd
$ shift (сдвиг аргументов)
$ echo $* (список аргументов после сдвига)
/dev /usr /udd
Дополнительное использование команды set заключается в том, что она часто используется в командных процедурах для присвоения значений позиционным параметрам.
Например,
$ set alpha beta gamma
$ echo $1 $2 $3
alpha beta gamma
$ echo $#
$ echo $*
alpha beta gamma
Например,
$ cat number
echo Number of arguments is $#
echo They are: $*
$ number one two three
Number of arguments is 3
They are: one two three