#!/bin/bash
a="2015-05-14 14:55:12.916395602 +0530Ttest_12345"
IFS='T' readarray -t ADDR <<< "$a"
echo "${ADDR[@]:1}"
a
delimiter 를 사용하여 문자열을 시간과 이름으로 분할 하려고 합니다 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