A resposta do slm aqui não levou em conta que você perguntou sobre o shell Korn, não sobre o shell Bourne Again. O shell do Korn (93) não possui o comando expr
integrado, portanto, ao usar expr
nos shell scripts do Korn, você está usando um comando expr
externo. Isto não é um problema em si. Afinal, é como alguém fez as coisas com o shell Bourne, que também não tinha o comando interno expr
. Mas, como M. Kohen aponta, pode-se preferir usar os built-ins de shell quando um shell os possui. E o shell Korn tem.
M. Kohen aponta para a substituição aritmética disponível no shell Korn. É importante lembrar que este é uma substituição, então você deve fazer algo com o resultado substituído se não quiser apenas executá-lo como um comando. A forma mais completa da resposta de M. Kohen (corrigir o erro de precedência do operador ao longo do caminho) é assim:
AVERAGE="$(( (first + second + third) / 3))"
Mas há duas outras maneiras de fazer isso no shell Korn. O shell Korn tem um comando interno chamado let
que faz avaliação aritmética em cada um dos seus argumentos:
let "AVERAGE = (first + second + third) / 3"
Todos os argumentos para o comando são uma única expressão, portanto, espaços em branco precisam ser citados como aqui.
Ele também tem uma parte da sintaxe que é descrita em um manual do clone do ksh como "açúcar sintático para let
" com a expressão transformada em um único argumento para esse comando:
(( AVERAGE = (first + second + third) / 3 ))
Leitura adicional
- Manual do KornShell 93 . 2012-06-19. AT & T.
- Bill Rosenblatt e Arnold Robbins (abril de 2002). " 6.2 Variáveis numéricas e aritméticas ". Aprendendo o Korn Shell . O'Reilly 2ª edição. ISBN 0-596-00195-9