Então, você tem seu script (apenas um pouco modificado para adicionar #! -line e aspas em torno da expansão de $1 para suportar a leitura de arquivos com nomes de arquivos incomuns),
#!/bin/sh
cat "$1"
Agora você quer chamar este script com uma matriz
arr=( 1 2 3 4 5 )
para que, em vez de ler um arquivo (que seu script está fazendo), ele leia o valor delimitado por nova linha de seu array, produzindo
1
2
3
4
5
como saída?
É assim que isso pode ser feito:
printf '%s\n' "${arr[@]}" | ./script -
ou
printf '%s\n' "${arr[@]}" | ./script /dev/stdin
Isso passaria - ou /dev/stdin para seu script como o arquivo a ser lido. O cat interpretará - como entrada padrão e, se fornecido /dev/stdin , também lerá da entrada padrão.
Os dados são fornecidos na entrada padrão por printf , que fornece como elementos delimitados por novas linhas da matriz.
O mesmo efeito seria com
( IFS=$'\n'; sh ./script.sh - <<<"${arr[*]}" )
onde os dados são fornecidos por meio de uma string here. Usando "${arr[*]}" , unimos os elementos da matriz em uma única string separada pelo primeiro caractere de $IFS (que definimos como uma nova linha). Estou usando um subshell aqui para evitar a modificação de IFS no ambiente ao redor.