本を読む

読書やコンピュータなどに関するメモ

Bash on Railsを作る(14) splitの研究 in bash

 「splitの研究」「splitの研究 in PHP」という流れを見たので、bashでやってみます。

 もちろんネタです。ネタついでに、半年ぶりに「Bash on Railsを作る」シリーズにしてみます。

IFSで分割

 bashの場合、変数IFSに設定されている文字のいずれかで、forやread、位置パラメータ、配列などが区切られるようになっています。

 ただし、IFSを変更すると影響が大きすぎます。たとえば、以下の例では何が起きたのでしょうか。

$ IFS=,
$ echo $IFS

$

 そのため、拙作「Bash on Rails」では、SHas(Active Supportもどき)でラッパー関数string_splitを用意しました。

function string_split() {
    local separator=$1
    local str=$2

    local IFS=$separator
    result_val=($str)
}

 bashの制約により、結果はグローバルな配列変数result_valに入れて返すという、ださい仕様になっています。

 ちなみに、bashのlocal変数は動的スコープです。

普通に分割

 もちろんbashを起動して調べてみます。

$ string_split ',' a,b,c
$ echo ${#result_val[@]} items
3 items
$ for e in "${result_val[@]}";do echo "$e";done
a
b
c
$

末尾の空要素は省略される

$ string_split ',' a,b,c,
$ echo ${#result_val[@]} items
3 items
$ for e in "${result_val[@]}";do echo "$e";done
a
b
c
$

 ちなみに途中の空要素は拾われます。

$ string_split ',' a,,,,b,c
$ echo ${#result_val[@]} items
6 items
$ for e in "${result_val[@]}";do echo "$e";done
a



b
c
$

空文字列だと結果も空

$ string_split ',' ''
$ echo ${#result_val[@]} items
0 items
$ for e in "${result_val[@]}";do echo "$e";done
$

空文字列に対して分割パターンも空文字

 同じです。

$ string_split '' ''
$ echo ${#result_val[@]} items
0 items
$ for e in "${result_val[@]}";do echo "$e";done
$

分割パターンが空正規表現/分割パターンが正規表現の .

 正規表現ってなんですか?(笑)

 以上、実生活には役に立たなそうな研究でした。

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://emasaka.blog65.fc2.com/tb.php/436-b354c489

 | HOME | 

Categories

Recent Entries

Recent Comments

Recent Trackbacks

Appendix

emasaka

emasaka

フリーター。
連絡先はこのへん

Monthly


FC2Ad