Se quiser fazer um loop sobre elementos alternativos do array, este deve funcionar no bash 3.2:
while IFS= read -d '' -r name; do
# do something with "$name"
done < <(printf %s%.0s\0 "${array[@]}")
Você pode fazer coisas semelhantes com xargs -0
, se isso for mais conveniente.
Se nenhum dos seus nomes incluir dois pontos (por exemplo), você poderá extrair os nomes em uma nova matriz como esta:
IFS=: read -a names -r < <(printf %s%.0s: "${array[@]}")
(Infelizmente você não pode definir o separador de campo como NUL).
Tudo isso depende do fato de que printf
repete sua string de formato tão frequentemente quanto necessário para usar todos os seus argumentos (comportamento do Posix, por isso deve funcionar em qualquer versão bash ou com o não-construído em printf
). O formato ocasionalmente útil %.0s
usa um argumento e imprime no máximo 0 caracteres dele, o que significa que ele é colocado no bitbucket.