Se você souber antecipadamente o que o comando está fazendo com os elementos da matriz, poderá usar sinalizadores de expansão de parâmetro (consulte man zshexpn ) para instruir zsh como adaptar a saída do comando à matriz. / p>
Exemplo
Digamos que uma matriz a contenha os nomes dos arquivos e cada arquivo contenha apenas uma linha de texto:
$ a=(foo 'bar baz')
$ cat foo
A
$ cat 'bar baz'
B C
Agora vamos supor, por causa do argumento, que o comando é apenas cat para colocar em uma matriz b do conteúdo dos arquivos. Neste caso, em vez de loop, podemos simplesmente escrever
b=(${(f)"$(cat "${a[@]}")"})
onde (f) divide o resultado de cat em separar palavras em novas linhas.
O resultado é o esperado:
$ echo "${b[1]}"
A
$ echo "${b[2]}"
B C
De acordo com o cenário real, você pode dividir em caracteres diferentes com o sinalizador ps:<character>: . Alguns deles como nova linha (ps:\n:) do exemplo acima ou caractere NULL (ps:(f):) têm abreviação: (0) e %code% respectivamente.