readarray - string dividida usando o delimitador IFS retorna array vazio

1
#!/bin/bash
a="2015-05-14 14:55:12.916395602 +0530Ttest_12345"
IFS='T' readarray -t ADDR <<< "$a"
echo "${ADDR[@]:1}"

Estou tentando dividir a string a no tempo e nome usando o delimitador T . Ao imprimir o primeiro elemento na matriz de resultados ADDR , ele imprime uma string vazia.

Como converter a string com delimitador em elementos da matriz?

    
por Madhavan Kumar 14.05.2015 / 19:37

2 respostas

2

A resposta de cuonglm está correta, você provavelmente deveria usar a expansão de parâmetro nesse contexto. No entanto, eu pensei que um exemplo de trabalho sobre o uso de IFS estava faltando:

$ IFS=T read -a ADDR <<<"2015-05-14 14:55:12.916395602 +0530Ttest_12345"
$ echo ${ADDR[0]}
2015-05-14 14:55:12.916395602 +0530
$ echo ${ADDR[1]}
test_12345
    
por 15.05.2015 / 17:32
3

readarray leu linhas da entrada padrão para o array, então você pode fazer algo assim:

$ a="2015-05-14 14:55:12.916395602 +0530Ttest_12345"
$ readarray -t ADDR <<<"$(tr T '\n'<<<"$a")"
$ printf %s\n "${ADDR[0]}"
2015-05-14 14:55:12.916395602 +0530
$ printf %s\n "${ADDR[1]}"
test_12345

Mas você não precisa de uma matriz, pode usar expansão de parâmetro :

$ a="2015-05-14 14:55:12.916395602 +0530Ttest_12345"
$ printf %s\n "${a%T*}"
2015-05-14 14:55:12.916395602 +0530
$ printf %s\n "${a##*T}"
test_12345
    
por 14.05.2015 / 19:56

Tags