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.