배쉬 설명서는 말한다 :
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
작동하지 않습니다.