Único parêntese na atribuição da variável bash

10

Então, isso pode parecer uma pergunta estúpida, mas eu meio que tenho TOC sobre esse tipo de coisa e fiquei me perguntando sobre parênteses únicos no bash. Eu sei que eles são usados para executar comandos em subshells e que eles são usados para criar arrays, mas eles são usados para qualquer outra coisa?

Uma coisa que me chamou a atenção é que quando você usa a atribuição de variável, como

var=(hello)
echo $var    # hello

bash não gera um erro ou algo assim, e a saída é a mesma que se

var=hello

Estas duas definições de variáveis são iguais ou existem diferenças? Eu pesquisei muito sobre isso, mas não encontrei nada. Obrigado antecipadamente!

    
por Mattias 23.07.2015 / 15:20

1 resposta

14

No seu caso parênteses () são usados como definição de array, por exemplo

a=(one two three)   # array definition
echo "${a}"         # print first element of array a
echo "${a[0]}"      # print first element of array a
echo "${a[1]}"      # print *second* element of array a
echo "${#a[@]}"     # print number of elements in array a

Se você colocar uma única variável na matriz, você terá apenas uma matriz com um único elemento.

Para responder à sua outra pergunta, se os parênteses também são usados para qualquer outra coisa: existem muitas situações em bash que, em combinação com outros caracteres, podem ser usadas como:

  • substituição de comando: $()
  • substituição de processo: <() e >()
  • subshell: (command)
  • avaliação aritmética
  • : (())
  • definição de função: fun () { echo x; }
  • lista de padrões no glob: ?() , *() , +() , @() , !() ( somente se extglob for ativado )
por 23.07.2015 / 15:27

Tags