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 conchasbasheksh. 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 scriptsbashnã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 comandoteste, normalmente, você o vê nas partes de tomada de decisão. É muito diferente em comportamento e propósito. -
leté uma palavra-chavebashekshque 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 embasheksh93. -
$(...)é 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.