Talvez tente:
unset arr
printf %s\n a b c | {
readarray arr
echo ${#arr[@]}
}
Espero que funcione, mas no momento em que você sair do último contexto {
shell ; }
no final do |
pipeline, você perderá seu valor variável. Isso ocorre porque cada um dos processos |
separate |
dentro de um |
pipeline é executado em (
subshell )
. Então, sua coisa não funciona pelo mesmo motivo:
( arr=( a b c ) ) ; echo ${arr[@]}
... não - o valor da variável foi definido em um diferente processo shell do que aquele em que você invoca.