A seguir estão duas read
instruções, uma que usa um espaço como delimitador e a outra \0
. Só o primeiro funciona. O que estou fazendo de errado com o segundo?
$ IFS=' '; read first second < <(printf "%s " "x" "y" ); echo "$first+$second"
x+y
$ IFS=$'\0'; read first second < <(printf "%s\0" "x" "y" ); echo "$first+$second"
xy+
Tente usar um array e o
mapfile
AKAreadarray
embutido. Vejahelp mapfile
para detalhes. Se você fornecer uma string vazia como argumento paramapfile
a-d
opção de , ela usará um NUL como delimitador.Primeiro, crie uma função que possa unir um array em uma única string com um separador arbitrário:
Isso usa o primeiro argumento como separador de saída e, em seguida, usa echo para imprimir os argumentos restantes como uma única string. Isso não se limita a unir arrays, funciona com qualquer argumento (arrays, variáveis escalares, strings fixas), mas é particularmente útil quando usado com arrays. É chamado
joinarray
para não entrar em conflito com ojoin
comando padrão.Então, usando um array chamado "$array":