Интерпретатор командного языка shell

Переменные и подстановка их значений


Все переменные в языке shell - текстовые. Их имена должны начинаться с буквы и состоять из латинских букв, цифр и знака подчеркивания (_). Чтобы воспользоваться значением переменной, надо перед ней поставить символ $. Использование значения переменной называется подстановкой.

Различается два класса переменных: позиционные и с именем. Позиционные переменные - это аргументы командных файлов, их именами служат цифры: $0 - имя команды, $1 - первый аргумент и т.д. Значения позиционным переменным могут быть присвоены и командой set (см. Специальные команды). Пример. После вызова программы на shellе, хранящейся в файле ficofl:

ficofl -d / \*.for

значением $0 будет ficofl, $1 - -d, $2 - /, $3 - *.for, значения остальных позиционных переменных будут пустыми строками. Заметим, что если бы символ * при вызове ficofl не был экранирован, в качестве аргументов передались бы имена всех фортранных файлов текущей директории.

Еще две переменные хранят командную строку за исключением имени команды: $@ эквивалентно $1 $2 ..., а $* - "$1 $2 ...". Начальные значения переменным с именем могут быть установлены следующим образом:

<имя>=<значение> [ <имя>=<значение> ] ...

Не может быть одновременно функции (см. ) и переменной с одинаковыми именами. Для подстановки значений переменных возможны также следующие конструкции:

${<переменная>}

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

${<переменная>:-<слово>}

если <переменная> определена и не является пустой строкой, то подставляется ее значение; иначе подставляется <слово>.

${<переменная>:=<слово>}

если <переменная> не определена или является пустой строкой, ей присваивается значение <слово>; после этого подставляется ее значение.



${<переменная>:?<слово>}

если <переменная> определена и не является пустой строкой, то подставляется ее значение; иначе на стандартный вывод выводится <слово> и выполнение shellа завершается.
Если <слово> опущено, то выдается сообщение "parameter null or not set".

${<переменная>:+<слово>}

если <переменная> определена и не является пустой строкой, то подставляется <слово>; иначе подставляется пустая строка.

Пример: если переменная d не определена или является пустой строкой, то выполняется команда pwd

echo ${d:-`pwd`}

Следующие переменные автоматически устанавливаются shell'ом:

# количество позиционных параметров (десятичное)

- флаги, указанные при запуске shellа или командой set

? десятичное значение, возвращенное предыдущей синхронно выполненной командой

$ номер текущего процесса

! номер последнего асинхронного процесса

@ эквивалентно $1 $2 $3 ...

* эквивалентно "$1 $2 $3 ..."

Напомним: чтобы получить значения этих переменных, перед ними нужно поставить знак $. Пример: выдать номер текущего процесса:

echo $$


Содержание раздела