Il manuale di Bash dice che:
SIMPLE COMMAND EXPANSION
When a simple command is executed, the shell performs the following
expansions, assignments, and redirections, from left to right.
[...]
4. The text after the = in each variable assignment undergoes tilde
expansion, parameter expansion, command substitution, arithmetic
expansion, and quote removal before being assigned to the variable.
L'espansione del controvento non è nell'elenco, quindi non viene eseguita per l'assegnazione v={a,b}-{1,2}
. Come menzionato da @Wildcard, la semplice espansione v=a-1 v=b-1 ...
sarebbe comunque insensata.
Inoltre, quando si esegue il echo $v
, si applica quanto segue:
EXPANSION
Expansion is performed on the command line after it has been split
into words. [...]
The order of expansions is: brace expansion; tilde expansion,
parameter and variable expansion, arithmetic expansion, and command
substitution (done in a left-to-right fashion); word splitting; and
pathname expansion.
L'espansione delle parentesi graffe si verifica prima dell'espansione variabile, quindi le parentesi graffe assegnate $v
non vengono espanse.
Ma puoi fare cose come questa:
$ var_this=foo var_that=bar
$ echo $var_{this,that}
foo bar
L'espansione con $(echo ...)
dovrebbe funzionare se non hai spazi bianchi nella stringa da espandere, e quindi non si verificheranno problemi con la suddivisione delle parole. Un modo migliore potrebbe essere quello di utilizzare una variabile array se è possibile.
ad es. salvare l'espansione in un array ed eseguire alcuni comandi con i valori espansi:
$ v=( {a,b}-{1,2} )
$ some_command "${v[@]}"
=
. Ad esempio,v=a-1 a-2
non funzionerà.