Bashのマニュアルは、と言っています:
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.
中括弧の展開はリストにないため、割り当てに対しては実行されませんv={a,b}-{1,2}
。@Wildcardで述べたように、v=a-1 v=b-1 ...
とにかく単純な拡張は無意味です。
また、を実行するecho $v
と、次のことが適用されます。
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.
中括弧の展開は変数の展開の前に行われるため、割り当てられた中括弧$v
は展開されません。
ただし、次のようなことができます。
$ var_this=foo var_that=bar
$ echo $var_{this,that}
foo bar
展開する$(echo ...)
文字列に空白がない場合は、を使用して展開すると機能するため、単語分割で問題が発生することはありません。より良い方法は、可能であれば配列変数を使用することです。
たとえば、展開を配列に保存し、展開された値を使用してコマンドを実行します。
$ v=( {a,b}-{1,2} )
$ some_command "${v[@]}"
=
。たとえば、機能しv=a-1 a-2
ません。