Paréntesis simple en asignación de variable bash

11

Me preguntaba sobre paréntesis individuales en bash. Sé que se usan para ejecutar comandos en subcapas y que se usan para crear matrices, pero ¿se usan para otra cosa?

Una cosa que me llamó la atención es que cuando usas la asignación variable, como

var=(hello)
echo $var    # hello

bash no genera un error ni nada, y la salida es la misma que si

var=hello

¿Son iguales estas dos definiciones de variables o hay alguna diferencia?

Mattias
fuente

Respuestas:

14

En su caso, los paréntesis ()se utilizan como definición de matriz, por ejemplo

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

Si coloca una variable única en la matriz, entonces solo tiene una matriz con un solo elemento.


Para responder a su otra pregunta si el paréntesis también se usa para otra cosa: hay muchas situaciones en las bashque, en combinación con otros caracteres, se pueden usar como:

  • sustitución de comando: $()
  • proceso de sustitución: <()y>()
  • subshell: (command)
  • evaluación aritmética: (())
  • definición de función: fun () { echo x; }
  • lista de patrones en pegote: ?(), *(), +(), @(), !()( sólo si extglobestá activado )
jimmij
fuente
1
Bien, en realidad no pensé en eso. Pero entonces, ¿ var=(1 2 3); echo $vares lo mismo que var=(1 2 3); echo ${var[0]}?
Mattias
Sí, el resultado bashes el mismo.
jimmij
¿Necesitamos ""adentro echo "${a}"?
nn0p
@ nn0p Sí, lo hacemos, si no queremos realizar la operación de división y globalización a. Considere por ejemplo a=*, luego intente echo $ay echo "$a".
jimmij