使用大括号扩展将扩展数组存储在变量中

Mur*_*aja 4 bash array brace-expansion

我想存储node1 node2 node3在一个变量中,以便它可以用作其他脚本的输入。

但是,我想通过使用 bash 给出的大括号扩展来做到这一点,如下所示:node{1..3}

我尝试使用一个变量nodes=node{1..3},但是当我将它用作脚本的参数 ( $nodes) 时,它会按字面意思拾取并且不会扩展。

Gil*_*il' 9

要分配给数组,请将元素放在括号中:

nodes=(node{1..3})
Run Code Online (Sandbox Code Playgroud)

使用数组时,您需要明确告诉 bash 您要将其扩展为数组。

mycommand "${nodes[@]}"
Run Code Online (Sandbox Code Playgroud)

由于 ksh 和 bash 中数组的设计怪癖,$node是数组的第一个元素,您需要显式询问具有[@]索引的所有元素。与往常一样,您需要在变量扩展周围使用双引号;使用 时[@],每个元素都被放入一个单独的单词中。

请参阅bash 手册以获取更多信息。

node=node{1..3}不起作用,因为大括号扩展仅发生在允许多个单词的上下文中。对标量(字符串)变量的赋值仅允许单个单词。在扩展变量时,您也只会得到一个单词,因为 Bash 在变量扩展之前进行大括号扩展。