Pouco tarde, mas não vejo a resposta sh
ideal aqui, então vou entrar em cena. Se você não precisa assinar, então sh
efetivamente suporta as matrizes. Apenas os suporta como strings separadas por espaço. Você pode imprimir todo o conteúdo deles, "empurrar" para eles ou iterá-los bem.
Veja um pouco de código de exemplo:
NAMES=""
NAMES="${NAMES} MYNAME"
NAMES="${NAMES} YOURNAME"
NAMES="${NAMES} THEIRNAME"
echo 'One at a time...'
for NAME in ${NAMES}; do
echo ${NAME};
done
echo 'All together now!'
echo ${NAMES}
Quais resultados:
One at a time...
MYNAME
YOURNAME
THEIRNAME
All together now!
MYNAME YOURNAME THEIRNAME
Agora, eu disse que ele não suporta sub-script, mas com um pouco de cut
magic e usando o espaço como um delimitador adequado, você pode imitar isso. Se adicionarmos isso ao final do nosso exemplo acima:
echo 'Get the second one'
echo ${NAMES} | cut -d' ' -f2
echo 'Add one more...'
NAMES="${NAMES} TOM"
echo 'Grab the third one'
echo ${NAMES} | cut -d' ' -f3
E corra, nós temos:
Get the second one
YOURNAME
Add one more...
Grab the third one
THEIRNAME
Qual é o que esperamos!
No entanto, uma string com um espaço pode causar um problema e interromper completamente o sub-script.
Então, realmente a melhor afirmação é: Arrays não são óbvios em sh
e é difícil lidar com arrays de strings com espaços. Se você não precisa fazer isso (por exemplo, uma matriz de nomes de host para a qual deseja implantar), o sh
ainda é uma excelente ferramenta para o trabalho.