float=$( openstack floating ip list -c 'Floating IP Address' -f value )
Isso cria uma variável string , não uma variável de matriz. A string é a saída do comando, menos qualquer nova linha no final.
Se você tentar usar uma variável de string como uma matriz, ela será tratada como uma matriz de elemento único com o valor da string na posição 0.
float=( $( openstack floating ip list -c 'Floating IP Address' -f value ) )
Isso não “coloca a substituição do comando em um subshell”. A própria substituição do comando $(…)
cria um subshell. Os parênteses em torno dele não criam outro subnível: eles criam um array. A matriz contém o conteúdo da lista de palavras resultante da obtenção da saída do comando, da remoção de novas linhas à direita, da divisão em uma lista de palavras separadas por espaços em branco e da substituição de qualquer elemento dessa lista que contenha caracteres curinga que correspondam a um ou mais arquivos lista de nomes de arquivos correspondentes.
Os parênteses criam um subshell quando estão em um local onde um comando é esperado. Em var=(…)
, o que é esperado imediatamente após o sinal de igual não é um comando, mas um valor para atribuição. Nesse contexto, os parênteses indicam que o valor é uma matriz.