readarray - IFS区切り文字を使用して文字列を分割すると、空の配列が返されます。

readarray - IFS区切り文字を使用して文字列を分割すると、空の配列が返されます。
#!/bin/bash
a="2015-05-14 14:55:12.916395602 +0530Ttest_12345"
IFS='T' readarray -t ADDR <<< "$a"
echo "${ADDR[@]:1}"

adelimiterを使用して文字列を時間と名前に分割しようとしていますT。ただし、結果の配列の最初の要素を印刷すると、空のADDR文字列が印刷されます。

区切り文字を含む文字列を配列要素に変換するには?

答え1

readarray標準入力の行を配列として読み取ることで、次のことができます。

$ 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

しかし、配列はまったく必要ありません。パラメータ拡張:

$ 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

答え2

cuonglmの答えが正しいです。この場合、パラメータ拡張を使用する必要があります。しかし、以下をIFS使用する実際の例がありません。

$ 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

関連情報