Todos eles lidam com aritmética, mas de maneiras diferentes e a variável é criada por meios diferentes. Algumas delas são específicas para bash
shells, enquanto outras não são.
-
((...))
é chamado de expansão aritmética, que é típica das conchasbash
eksh
. Isso permite fazer uma simples aritmética integer , mas sem ponto flutuante.((...))
é apenas uma ação, então$((..))
substitui a saída da operação. -
$[...]
é a antiga sintaxe para expansão aritmética que é obsoleta. Veja também . Isso provavelmente foi mantido para que os antigos scriptsbash
não quebrem. Isso não funcionou emksh93
, então meu palpite é que essa sintaxe é bash-specific. NOTA : espaços são muito importantes aqui; não confunda$[1+1]
com coisas como[ $a -eq $b ]
. O[
com espaços é conhecido como o comandotest
e, normalmente, você o vê nas partes de tomada de decisão. É muito diferente em comportamento e propósito. -
let
é uma palavra-chavebash
eksh
que permite a criação de variáveis com avaliação aritmética simples. Se você tentar atribuir uma string comolet a="hello world"
, receberá um erro de sintaxe. Funciona embash
eksh93
. -
$(...)
é a substituição de comando, onde você literalmente pega a saída de um comando e atribui a uma variável. Seu comando aqui éexpr
, que recebe argumentos posicionais, comoexpr arg1 arg2 arg3
, de modo que os espaços são importantes. É como uma pequena calculadora de linha de comando para aritmética inteira, além de alguns tipos de coisas verdadeiro / falso e regex. Este é um comando de shell neutro.
Também é importante notar que a expansão aritmética e a substituição de comandos são especificadas pelo padrão POSIX , enquanto let
e $[...]
não são.