Mur*_*aja 4 bash array brace-expansion
我想存储node1 node2 node3
在一个变量中,以便它可以用作其他脚本的输入。
但是,我想通过使用 bash 给出的大括号扩展来做到这一点,如下所示:node{1..3}
我尝试使用一个变量nodes=node{1..3}
,但是当我将它用作脚本的参数 ( $nodes
) 时,它会按字面意思拾取并且不会扩展。
要分配给数组,请将元素放在括号中:
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 在变量扩展之前进行大括号扩展。