The pengguna Bash mengatakan bahwa:
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.
Perluasan brace tidak ada dalam daftar, sehingga tidak dilakukan untuk penugasan v={a,b}-{1,2}
. Seperti yang disebutkan oleh @Wildcard, ekspansi sederhana v=a-1 v=b-1 ...
menjadi tidak masuk akal.
Juga, ketika menjalankan echo $v
, hal berikut ini berlaku:
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.
Ekspansi brace terjadi sebelum ekspansi variabel, sehingga kawat gigi yang ditugaskan $v
tidak diperluas.
Tetapi Anda dapat melakukan hal-hal seperti ini:
$ var_this=foo var_that=bar
$ echo $var_{this,that}
foo bar
Perluasan dengan itu $(echo ...)
akan berfungsi jika Anda tidak memiliki spasi kosong di string yang akan diperluas, dan karenanya tidak akan mengalami masalah dengan pemisahan kata. Cara yang lebih baik adalah menggunakan variabel array jika Anda bisa.
mis. simpan ekspansi ke dalam array dan jalankan beberapa perintah dengan nilai yang diperluas:
$ v=( {a,b}-{1,2} )
$ some_command "${v[@]}"
=
. Misalnya,v=a-1 a-2
tidak akan berfungsi.