Os problemas que você pode enfrentar são os mais comuns: divisão e globbing.
Você não pode ter strings com espaço em branco, pois elas serão divididas em itens de matriz separados e qualquer coisa que se pareça com um caractere glob ( *?[]
) será expandida para nomes de arquivos correspondentes. Provavelmente não é um problema com nomes de host, mas, em geral, é.
Este é um problema comum, discutido repetidamente, ver, e. Expansão de uma concha variável e efeito da glob e dividida nela e
Para contornar isso, você precisaria a) definir IFS
para algo diferente de espaço em branco e separar suas strings com isso eb) desabilitar a globbing com set -f
.
Isso usaria |
como separador e dividiria a string. Você poderia usar qualquer caractere não necessário nos valores, talvez até mesmo algum caractere de controle como
(Use $'
1HOST_NAMES
1'awk
no Bash para criá-lo).
#!/bin/bash
string='foo|bar'
IFS='|'; set -f
array=($string) # split it
IFS='|'
string="${array[*]}" # merge it back together
Além disso, como dizem nos comentários, se sua variável tem apenas nomes de host e você está bem com a divisão no espaço em branco, você não precisa do awk para dividi-lo. O shell fará isso ao atribuir um array ou iniciar o loop:
SRVR_ARRAY=( $HOST_NAMES )
for x in $HOST_NAMES ; do ...
(Novamente, você terá problemas se $()
contiver caracteres glob.)
Na verdade, é isso que vai acontecer mesmo com o seu exemplo: %code% imprime algo, o shell captura, divide em palavras, pois o %code% não estava entre aspas duplas e, em seguida, salva as palavras separadamente na matriz.