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?

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é )

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.