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

관련 정보