Parentesi singola nell'assegnazione delle variabili bash


11

Mi stavo chiedendo delle parentesi singole in bash. So che sono usati per eseguire comandi in subshells e che sono usati per creare array, ma sono usati per qualcos'altro?

Una cosa che ha attirato la mia attenzione è che quando si utilizza l'assegnazione in variabile, come

var=(hello)
echo $var    # hello

bash non genera alcun errore o altro e l'output è lo stesso di if

var=hello

Queste due definizioni di variabili sono uguali o c'è una differenza?

Risposte:


14

Nel tuo caso le parentesi ()sono usate come definizione di array, ad esempio

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 metti una singola variabile in un array, allora hai solo un array con un singolo elemento.


Per rispondere alla tua altra domanda se le parentesi sono usate anche per qualcos'altro: ci sono molte situazioni in bashcui in combinazione con altri personaggi possono essere usate come:

  • sostituzione del comando: $()
  • sostituzione del processo: <()e>()
  • subshell: (command)
  • valutazione aritmetica: (())
  • definizione della funzione: fun () { echo x; }
  • Lista modello in glob: ?(), *(), +(), @(), !()( solo se extglobè abilitato )

1
Bene, in realtà non ci avevo pensato. Ma var=(1 2 3); echo $varlo stesso vale var=(1 2 3); echo ${var[0]}?
Mattias,

Sì, il risultato bashè lo stesso.
Jimmij,

Abbiamo bisogno ""di echo "${a}"?
nn0p,

@ nn0p Sì, se non vogliamo eseguire operazioni split e glob su a. Considerare ad esempio a=*, quindi provare echo $ae echo "$a".
Jimmij,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.