シェルスクリプトに無知なもので
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
とっても素直な結果だ。
コメントを残す