bashでsplitを書いてみた
空白絡むとどうにも配列で返せなかったんで、裏変数(_split)経由で結果渡すようにしてるのがイマイチ。。。
#!/bin/bash set -u set -e export LANG="C" split() { sep=$1 str=$2 _split=() if [[ $str =~ $sep ]]; then while IFS= read -r e; do _split+=("$e") done < <(echo "${str//$sep/$'\n'}") fi # declare -p _split >&2 } split ':' 'foo:bar:baz' declare -p _split echo ">${_split[0]}<" split ':' 'f o o:b a r:baz' declare -p _split echo ">${_split[0]}<" split ':' ':' declare -p _split echo ">${_split[0]}<" exit
結果:
declare -a _split='([0]="foo" [1]="bar" [2]="baz")' >foo< declare -a _split='([0]="f o o" [1]="b a r" [2]="baz")' >f o o< declare -a _split='([0]="" [1]="")' ><