O shell não sabe que \tdeve ser uma guia. Ele está procurando por um literal \seguido por um t(ignorando o último como delimitadores só podem ser bytes únicos (nem mesmo caracteres)):
Para permitir qualquer valor (que não contenha caracteres TAB nem NUL), incluindo os vazios, você deve certificar-se de que eles sejam delimitados por:
printf '%s\t' "$val1" "$val2" "$val3"
Igual a:
printf '%s\t%s\t%s\t' "$val1" "$val2" "$val3"
Você também pode querer remover os delimitadores dos elementos do array com a opção readarray's -t.
O shell não sabe que
\t
deve ser uma guia. Ele está procurando por um literal\
seguido por umt
(ignorando o último como delimitadores só podem ser bytes únicos (nem mesmo caracteres)):Para guias reais, você precisa escapar assim:
Observe que seu terceiro valor acima não é delimitado. Está tudo bem aqui porque não está vazio, mas se estivesse vazio, você teria obtido:
Para permitir qualquer valor (que não contenha caracteres TAB nem NUL), incluindo os vazios, você deve certificar-se de que eles sejam delimitados por:
Igual a:
Você também pode querer remover os delimitadores dos elementos do array com a opção
readarray
's-t
.