Bash manuel söylüyor:
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.
Köşeli ayraç genişletmesi listede değil, bu nedenle ödev için gerçekleştirilmez v={a,b}-{1,2}
. @Wildcard tarafından belirtildiği gibi, basit genişleme v=a-1 v=b-1 ...
zaten anlamsız olacaktır.
Ayrıca, çalıştırılırken echo $v
aşağıdakiler geçerlidir:
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.
Brace genişlemesi değişken genişlemeden önce gerçekleşir, bu nedenle atanan parantezler $v
genişletilmez.
Ama böyle şeyler yapabilirsiniz:
$ var_this=foo var_that=bar
$ echo $var_{this,that}
foo bar
Genişletilecek $(echo ...)
dizede herhangi bir boşluk yoksa ve bu nedenle sözcük bölme ile ilgili sorunlarla karşılaşmazsanız, genişletmek işe yaramalıdır. Mümkünse bir dizi değişkeni kullanmak daha iyi bir yol olabilir.
örneğin, genişletmeyi bir diziye kaydedin ve genişletilmiş değerlerle bir komut çalıştırın:
$ v=( {a,b}-{1,2} )
$ some_command "${v[@]}"
=
. Örneğin,v=a-1 a-2
çalışmaz.