シェルスクリプトに無知なもので
Linux June 25th, 2008
bashで文字列を変数に展開するのにsedを何回も呼ぶのはいかがなものかと思ったので、なんとからなんかといじっていたら、文字列を分解して変数に展開するのは配列を使ってこういう感じでやるのかと気づいた。
$ cat test.sh
#!/bin/bash
TESTDATA="1 2"
DATA=(`sed <<< $TESTDATA -e s/[^0-9]/\ /g`)
echo ${DATA[0]}
echo ${DATA[1]}
$ ./test.sh
1
2
そこで他にもないか調べていたら、sedの呼び方は
$ echo $AAA | sed -e s/3/aho/g
より
$ sed <<< $AAA -e s/3/aho/g
の方が早いらしい。
ちょっと計ってみた。
#!/bin/sh
MAX=1000
COUNT=1
while [ $COUNT -le $MAX ];
do
echo $COUNT | sed -e s/[0-9]/hoge/g
COUNT=`expr $COUNT + 1`
done
これと
#!/bin/sh
MAX=1000
COUNT=1
while [ $COUNT -le $MAX ];
do
sed <<< $COUNT -e s/[0-9]/hoge/g
COUNT=`expr $COUNT + 1`
done
これで計測した結果。
MAXを1000にしたら
echo :real 0m4.470s
ヒアドキュメント:real 0m3.679s
MAXを10000にしたら
echo :real 0m43.403s
ヒアドキュメント:real 0m36.990s
とっても素直な結果だ。