在Bash中从变量进行大括号扩展

3
我希望能在Bash中扩展一个变量。以下是我的例子:
variable="{1,2,3}"
echo $variable

预期输出:

1 2 3

实际输出:

{1,2,3}
2个回答

3
由于Bash执行命令行扩展的顺序,因此扩展无法正常工作。如果您阅读man页面,您会看到执行顺序如下:
1.大括号扩展 2.波浪号扩展 3.参数扩展 4.命令替换 5.算术扩展 6.进程替换 7.单词分割 8.路径名扩展 9.引号删除
在大括号扩展之后发生参数扩展,这意味着您不能像正在尝试的那样将大括号扩展放入变量中。
但是不要害怕,有一个解决方案!要将数字列表存储在变量中,您可以使用数组。
variable=(1 2 3)
echo "${variable[@]}"

1

这不起作用是因为双引号抑制了花括号扩展:

variable="{1,2,3}"

这仍然无法工作,因为bash不会将列表分配给变量:
variable={1,2,3}

解答是将您的列表分配给一个 数组:
$ variable=( {1,2,3} )
$ echo "${variable[@]}"
1 2 3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接