Brace expansion from a variable in Bash

后端 未结 2 855
伪装坚强ぢ
伪装坚强ぢ 2021-01-21 18:41

I would like to expand a variable in Bash. Here\'s my example:

variable=\"{1,2,3}\"
echo $variable

Expected output:

1 2 3


        
相关标签:
2条回答
  • 2021-01-21 19:05

    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
    
    0 讨论(0)
  • 2021-01-21 19:12

    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:

    1. Brace expansion
    2. Tilde expansion
    3. Parameter expansion
    4. Command substitution
    5. Arithmetic expansion
    6. Process substitution
    7. Word splitting
    8. Pathname expansion
    9. 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[@]}"
    
    0 讨论(0)
提交回复
热议问题