#!/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