Eu crio um array com uma vírgula como delimitador:
echo "${myarray[*]}"
# prints: 22,3,2,0,22,4,5,8,22,4,3,6
Gostaria de imprimi-lo no terminal em pedaços de quatro, com uma nova linha e sem vírgula antes da nova linha. como:
22,3,2,0
22,4,5,8
22,4,3,6
Eu tenho lutado tentando fazer com que os loops funcionem com ele, como:
for i in {0..${#myarray[@]}..4} do
##tried lots of things that didn't work here
done
Alguém pode me indicar a direção certa ou como pensar sobre isso? Por favor e obrigado.
Que tal isso:
Isso é usado
printf
para produzir uma linha de entrada parapaste
cada elemento em sua matriz. Opaste
utilitário distribui essas linhas em quatro campos delimitados por vírgulas por linha de saída.Não há necessidade de um loop separado no shell.
O que quer que esteja produzindo os elementos do seu array pode substituir a
printf
chamada e você pode, dessa forma, ignorar completamente a criação do array.Observe que
some-command
pode ser um comando composto arbitrariamente complexo.Se for garantido que o número de elementos é múltiplo de 4 e maior que 0:
Se não, isso dá:
Com
zsh
:O que modifica
$myarray
ou:O que ambos dão:
Esse último você poderia fazer no bash com:
Contar com
"${array[*]}"
a união dos elementos com o primeiro caractere de$IFS
as bash não tem equivalente paraj
o sinalizador de expansão do parâmetro oin do zsh.