shell - o que exatamente é a quota dupla ((..)) significa?

2

Eu sei em shell (bash), operação aritmética poderia ser feita dentro de ((..)) ,

por exemplo,

i=1
((i++)) #i=1
((i+=1)) #i=3

A minha pergunta é:

O que exatamente fez ((..)) fazer? Cria uma variável anônima?

    
por Eric Wang 08.01.2015 / 09:27

4 respostas

0

Sintaxe de Expressão Aritmética -

(( expression ))

A expressão é avaliada de acordo com as regras descritas em AVALIAÇÃO ARITMÉTICA. Se o valor da expressão for diferente de zero, o status de retorno será 0; caso contrário, o status de retorno é 1. Isso é exatamente equivalente a let "expression" .

Expansão aritmética permite a avaliação de uma expressão aritmética e a substituição do resultado. O formato da expansão aritmética é:

$(( expression ))

A expressão é tratada como se estivesse entre aspas duplas , mas as aspas duplas dentro dos parênteses não são tratadas especialmente. Todos os tokens na expressão sofrem expansão de parâmetros e variáveis, substituição de comandos e remoção de cotações. O resultado é tratado como a expressão aritmética a ser avaliada. Expansões aritméticas podem ser aninhadas.

A inclusão de caracteres entre aspas duplas preserva o valor literal de todos os caracteres dentro das aspas , com exceção de $, \ e, quando a expansão do histórico é ativada,! Os caracteres $ e 'mantêm seu significado especial entre aspas duplas. A barra invertida mantém seu significado especial apenas quando seguida por um dos seguintes caracteres: $, ", \ ou. Uma aspa dupla pode ser colocada entre aspas duplas precedendo-a com uma barra invertida. Se ativado, a expansão do histórico será executada a menos que ! aparecer entre aspas duplas é escapado usando uma barra invertida. A barra invertida que precede o! não é removida.

Referência

    
por Rohith Madhavan 08.01.2015 / 09:35
0

Permite o cálculo de uma expressão matemática e a substituição do resultado

  

Expansão aritmética permite a avaliação de uma expressão aritmética   e a substituição do resultado. O formato da aritmética   expansão é:

     

$ ((expression))

     

A expressão é tratada como se estivesse entre aspas duplas, mas um   Aspas duplas dentro dos parênteses não são tratadas especialmente. Todos   tokens na expressão sofrem expansão de parâmetro, string   expansão, substituição de comando e remoção de cotação. Aritmética   expansões podem ser aninhadas.

     

A avaliação é realizada de acordo com as regras listadas abaixo sob   AVALIAÇÃO ARITMÉTICA. Se a expressão for inválida, o bash imprime uma mensagem   indicando falha e nenhuma substituição ocorre. Manpage do Bash

    
por Mitch 08.01.2015 / 09:35
0

O ((..)) simplesmente informa ao interpretador de shell que você estará fazendo aritmética. Normalmente no bash você precisaria de backticks '...' para fazer aritmética. Esta é uma sintaxe alternativa que é mais semelhante a C e permite que coisas como i ++ incrementem a variável i por 1. Há uma resposta em stackoverflow que explica bem.

    
por willl459 08.01.2015 / 09:43
0

Em bash (não no shell POSIX), (( expressão)) permite que você faça uma avaliação aritmética. É o mesmo que:

let "expression"

Ele não cria variáveis anônimas, ele avaliou a expressão no shell atual, afetou todas as variáveis no contexto atual do shell. Se o valor da expressão for diferente de zero, o status de retorno será 0, caso contrário, o status de retorno será 1.

Uma observação de que ((...)) e let são recursos de ksh e estão disponíveis somente em bash , zsh e ksh . Você deve usar ((..)) over let porque é mais legível e fácil de citar do que usar let .

Para portabilidade, usando $ ((...)) construct.

    
por cuonglm 08.01.2015 / 09:56