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}"

我正在尝试a使用分隔符将字符串拆分为时间和名称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

相关内容