* 文字列をデリミタ指定してsplitする [#v75ed8ce]
** 1. cut [#o3ce1967]
*** 1. cutを使う(簡単) [#u18f3b1c]
$ echo '2016-02-03' | cut -d '-' -f 2
02
- 簡単で使いやすい。後述の方法のようにBash配列を使わず、インデックスを指定して直接取り出せるので便利。
- しかし、遅い。ループで数百回以上繰り返すような場合、時間が掛かりすぎる事が多い。
** 2. trでデリミタをIFSに変換し、Bash配列に格納する [#m35eeac9]
*** 2. trでデリミタをIFSに変換しBash配列に格納する [#w36491fa]
$ nums=($(echo '2016-02-03' | tr '-' ' '))
$ echo ${nums[1]}
02
- cutよりは速い。(多分)
- しかし、後述のパラメーター展開を使った方がより速い。(多分)
*** 3. パラメータ展開で先頭もしくは末尾を取り出す [#gdd057b6]
$ dt='2016-02-03'
$ echo ${dt%%-*}
2016
$ echo ${dt##*-}
03
- 先頭もしくは末尾を取り出すのなら、速くていい。
*** 4. パラメータ展開でデリミタをIFSに変換しBash配列に格納する [#p26aade1]
$ dt='2016-02-03'
$ nums=(${dt//-/ })
$ echo ${nums[1]}
02
- 変数名//の後にデリミタを指定し、/の後にワンスペースを置く。これで配列としてdtに格納できる。
** 参考 [#y201409e]
http://stackoverflow.com/questions/918886/how-do-i-split-a-string-on-a-delimiter-in-bash