我想存储node1 node2 node3
在一个变量中,以便它可以用作其他脚本的输入。
但是,我想通过使用 bash 给出的大括号扩展来做到这一点,如下所示:node{1..3}
我尝试使用一个变量nodes=node{1..3}
,但是当我将它用作脚本的参数 ( $nodes
) 时,它会按字面意思拾取并且不会扩展。
答案1
要分配给数组,请将元素放在括号中:
nodes=(node{1..3})
使用数组时,您需要明确告诉 bash 您要将其扩展为数组。
mycommand "${nodes[@]}"
由于 ksh 和 bash 中数组的设计怪癖,$node
是数组的第一个元素,您需要显式询问具有索引的所有元素[@]
。一如既往,你需要变量扩展周围用双引号引起来;使用 时[@]
,每个元素都被放入一个单独的单词中。
请参阅bash手册了解更多信息。
node=node{1..3}
不起作用,因为大括号扩展仅发生在允许多个单词的上下文中。对标量(字符串)变量的赋值仅允许单个单词。在扩展变量时,您也只会得到一个单词,因为 Bash 在变量扩展之前进行大括号扩展。
答案2
供专家用户考虑:
$ mapfile -t arr < <(printf "%s\n" node{1..3})
$ printf "%s\n" "${arr[@]}"
node1
node2
node3
答案3
看了这个问题后找到了答案:$array 不在 ksh 和 bash 中扩展整个数组的理由是什么?
nodes=$(echo nodes{1..3})