Parenthèse unique dans l'affectation des variables bash

11

Je me posais des questions sur les parenthèses simples dans bash. Je sais qu'ils sont utilisés pour exécuter des commandes dans des sous-coquilles et qu'ils sont utilisés pour créer des tableaux, mais sont-ils utilisés pour autre chose?

Une chose qui a attiré mon attention est que lorsque vous utilisez l'affectation de variable, comme

var=(hello)
echo $var    # hello

bash ne génère pas d'erreur ou quoi que ce soit, et la sortie est la même que si

var=hello

Ces deux définitions de variables sont-elles identiques ou y a-t-il une différence?

Mattias
la source

Réponses:

14

Dans votre cas, les parenthèses ()sont utilisées comme définition de tableau, par exemple

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 vous mettez une seule variable dans un tableau, vous n'avez qu'un tableau avec un seul élément.


Pour répondre à votre autre question de savoir si les parenthèses sont également utilisées pour autre chose: il existe de nombreuses situations dans bashlesquelles en combinaison avec d'autres caractères, elles peuvent être utilisées comme:

  • substitution de commande: $()
  • substitution de processus: <()et>()
  • sous-coque: (command)
  • évaluation arithmétique: (())
  • définition de la fonction: fun () { echo x; }
  • liste des motifs en glob: ?(), *(), +(), @(), !()( seulement si extglobest activé )
jimmij
la source
1
Bon, en fait, je n'y ai pas pensé. Mais var=(1 2 3); echo $varc'est la même chose que var=(1 2 3); echo ${var[0]}?
Mattias
Oui, le résultat bashest le même.
jimmij
Avons-nous besoin ""de echo "${a}"?
nn0p
@ nn0p Oui, nous le faisons, si nous ne voulons pas effectuer d'opération de division et de globalisation sur a. Considérons par exemple a=*, essayez echo $aet echo "$a".
jimmij