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