Các nhãn hiệu Bash nói rằng:
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.
Mở rộng cú đúp không có trong danh sách, vì vậy nó không được thực hiện cho nhiệm vụ v={a,b}-{1,2}
. Như được đề cập bởi @Wildcard, việc mở rộng đơn giản v=a-1 v=b-1 ...
sẽ trở nên vô nghĩa.
Ngoài ra, khi thực hiện echo $v
, áp dụng như sau:
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.
Mở rộng niềng răng xảy ra trước khi mở rộng biến đổi, vì vậy niềng răng được chỉ định $v
không được mở rộng.
Nhưng bạn có thể làm những thứ như thế này:
$ var_this=foo var_that=bar
$ echo $var_{this,that}
foo bar
Mở rộng nó $(echo ...)
sẽ hoạt động nếu bạn không có bất kỳ khoảng trắng nào trong chuỗi được mở rộng và do đó sẽ không gặp phải vấn đề với việc tách từ. Một cách tốt hơn có thể là sử dụng một biến mảng nếu bạn có thể.
ví dụ: lưu mở rộng vào một mảng và chạy một số lệnh với các giá trị được mở rộng:
$ v=( {a,b}-{1,2} )
$ some_command "${v[@]}"
=
. Ví dụ,v=a-1 a-2
sẽ không hoạt động.