Кроме стандартной оболочки Korn (/usr/bin/ksh), AIX содержит ее расширенную версию /usr/bin/ksh93. Расширенная версия совместима сверху со стандартной оболочкой, но содержит несколько дополнительных функций, отсутствующих в /usr/bin/ksh. В следующей таблице перечислены все новые функции.
В оболочке /usr/bin/ksh93 есть следующие функции:
Арифметические расширения |
Вы можете вызывать функции libm (математические функции, реализованные в
языке программирования C) в стандартных арифметических выражениях, например
$ value=$((sqrt(9))). В новой оболочке реализовано больше
операторов, включая унарные конструкции +, ++,
-- и ?: (например, "x ? y : z"),
а также оператор , (запятая). Поддерживаются арифметические
основания, не превышающие 64. Также поддерживаются вычисления с
плавающей точкой. Для указания количества значащих разрядов можно
ввести "typeset -E", а для указания количества десятичных позиций в
вещественной переменной - "typeset -F". Переменная
SECONDS теперь округляет число секунд сверху до ближайшей сотни, а
не до целого числа секунд.
|
Составные переменные |
В оболочке ksh93 поддерживаются составные переменные. Составные переменные позволяют указывать несколько значений с помощью одного имени переменной. Конкретные значения указываются по индексу, отделенному от имени переменной с помощью точки . Например:
$ myvar=( x=1 y=2 ) $ print "${myvar.x}" 1 |
Присвоения составных переменных |
Присвоение составных переменных поддерживается при инициализации массивов, как индексированных, так и именованных. Присваиваемые значение нужно заключить в скобки, как показано в следующем примере:
$ numbers=( zero one two three ) $ print ${numbers[0]} ${numbers[3]} zero three |
Именованные массивы | Именованный массив - это массив, в котором в качестве индексов
применяются строковые значения.
Для работы с именованными массивами применяется команда typeset с флагом -A. Например:
$ typeset -A teammates $ teammates=( [john]=smith [mary]=jones ) $ print ${teammates[mary]} jones |
Ссылки на переменные |
С помощью команды typeset с флагом -n можно присвоить одной переменной значение ссылки на другую. В этом случае изменение значения одной переменной немедленно вызовет изменение значения другой. Например:
$ greeting="hello" $ typeset -n welcome=greeting # создание ссылки $ welcome="Привет!" # переопределение значения $ print $greeting Привет! |
Развертывание параметров |
В оболочке ksh93 применяются следующие конструкции развертывания параметров:
|
Дисциплинарные функции |
Дисциплинарная функция - это функция, связанная с конкретной переменной. Эта функция будет вызываться каждый раз при обращении, присвоении или сбросе переменной. Функции задаются в виде переменная.функция, где переменная - это имя переменной, а функция - дисциплинарная функция. Есть три предопределенных дисциплинарных функции: get, set и unset.
Во всех дисциплинарных функциях специальная переменная .sh.name равна имени переменной, а .sh.subscript - ее индексу, если он есть. |
Среда выполнения функции |
Функции, объявленные в формате function функция,
выполняются в отдельной среде. Функции, объявленные в формате
функция(), выполняются в той же среде, что и
родительская оболочка.
|
Переменные |
Переменные, начинающиеся с .sh., зарезервированы оболочкой и имеют специальное значение. Переменные .sh.name, .sh.value и .sh.subscript описаны в разделе Дисциплинарные функции. Кроме того, переменная .sh.version содержит значение версии оболочки. Примечание: Переменная ERRNO более не
используется.
|
Значения, возвращаемые командами |
Команды оболочки ksh93 возвращают следующие значения:
|
Правила поиска в PATH |
Сначала выполняется поиск специальных встроенных команд, затем всех
остальных функций (включая находящиеся в каталогах FPATH), а затем всех
встроенных функций. Ранее встроенные функции просматривались до обычных
функций, а функции в FPATH просматривались только после завершения просмотра
каталогов из PATH.
|
Хронология оболочки |
Команда hist позволяет просматривать список выполнявшихся ранее
команд и редактировать выбранные команды. В оболочке ksh применялась
команда fc. Теперь команда fc - это псевдоним
команды hist. Переменная HISTCMD увеличивается на единицу
каждый раз при вызове команды в оболочке, а переменная HISTEDIT указывает,
какой редактор нужно применять при вызове команды hist.
|
Встроенные команды |
|