I would like to expand a variable in Bash. Here's my example:
variable="{1,2,3}"
echo $variable
Expected output:
1 2 3
Actual output:
{1,2,3}
The expansion doesn't work because of the order in which bash performs command-line expansion. If you read the man page you'll see the order is:
- Brace expansion
- Tilde expansion
- Parameter expansion
- Command substitution
- Arithmetic expansion
- Process substitution
- Word splitting
- Pathname expansion
- Quote removal
Parameter expansion happens after brace expansion, which means you can't put brace expansions inside variables like you're trying.
But never fear, there's an answer! To store a list of numbers in a variable, you can use an array.
variable=(1 2 3)
echo "${variable[@]}"
This won't work first because double-quotes suppress brace expansion:
variable="{1,2,3}"
This still won't work because bash will not assign a list to a variable:
variable={1,2,3}
The solution is to assign your list to an array:
$ variable=( {1,2,3} )
$ echo "${variable[@]}"
1 2 3
来源:https://stackoverflow.com/questions/30064674/brace-expansion-from-a-variable-in-bash