Como enviar elementos de matriz para stdin de um comando?

1

Eu tenho um comando que pode receber uma lista de caminhos de arquivos, separados por nova linha, de stdin. Eu tenho esses caminhos de arquivos armazenados em uma matriz. Como devo enviar os elementos da matriz para o comando?

Eu usei o seguinte, mas tenho uma vaga sensação de que não estou fazendo isso de maneira eficiente:

files=("/first/file" "/second/file" "/some/directory" "/file/with spaces")
for i in "${places[@]}" ; do echo "$i" ; done | command ...
    
por Arronical 03.02.2017 / 13:43

1 resposta

4

Eu prefiro printf :

printf "%s\n" "${array[@]}" | ...

Você também pode usar IFS para unir elementos de matriz usando um caractere:

(IFS=$'\n'; echo "${array[*]}") | ...

A diferença entre "${array[@]}" e "${array[*]}" é que o primeiro se expande para os elementos do array como palavras separadas, o segundo se expande para uma única palavra formada unindo os elementos do array usando o primeiro caractere de IFS .

    
por muru 03.02.2017 / 14:08