В ответе
slm не учтено, что вы спрашивали об оболочке Korn, а не об оболочке Bourne Again. В оболочке (93) Korn нет встроенной команды expr
, поэтому при использовании expr
в сценариях оболочки Korn вы используете внешнюю команду expr
. Это не является проблемой как таковой. В конце концов, именно так поступали с оболочкой Bourne, в которой также не было встроенной команды expr
. Но, как отмечает М. Коэн, можно предпочесть использовать встроенные команды оболочки, если они есть. А в оболочке Korn они есть.
M. Коэн указывает на арифметическую подстановку, доступную в оболочке Korn. Важно помнить, что это подстановка, поэтому вы должны что-то сделать с результатом подстановки, если не хотите просто выполнить ее как команду. Более полная форма ответа М. Коэна (попутно исправляя ошибку предшествования операторов) выглядит так:
AVERAGE="$(( (first + second + third) / 3))"
Но есть два других способа сделать это в оболочке Korn. В оболочке Korn есть встроенная команда let
, которая выполняет арифметическую оценку на каждом из своих аргументов:
let "AVERAGE = (first + second + third) / 3"
Каждый аргумент команды является одним выражением, поэтому пробелы должны быть заключены в кавычки, как здесь.
У него также есть часть синтаксиса, которая описана в руководстве одного клона ksh как "синтаксический сахар для let
" с выражением, превращенным в единственный аргумент этой команды:
(( AVERAGE = (first + second + third) / 3 ))