cut vs. parameter expansion


1 min read
cut vs. parameter expansion

TL;DR:: bash/zsh parameter expansion is faster than cut.

which is faster?

Consider you want to take out hostname from URL or IP with port like some.mysql.server:3306 or 192.168.1.10:3306 using bash/zsh.
There are some way to do this.

The first way is using cut command:

$ TARGET="192.168.1.10:3306"
$ echo ${TARGET} | cut -d ":" -f 1

Now printed 192.168.1.10 on your screen.

The second way is using "shell parameter expansion", which is functions of bash/zsh built-in.
You can use shell parameter expansion like below:

$ TARGET="192.168.1.10:3306"
$ echo ${TARGET%:*}

Printed 192.168.1.10 too.

Which is faster, using cut or shell parameter expansion?
I make a small benchmark.

$ time for i in {1..1000}; do echo $(echo ${TARGET} | cut -d ':' -f 1); done > /dev/null

real	0m17.422s
user	0m1.325s
sys	0m1.890s
$ time for i in {1..1000}; do echo ${TARGET%:*}; done > /dev/null

real	0m0.008s
user	0m0.007s
sys	0m0.001s

Wow! In this situation, shell parameter expansion is faster than cut command solution!

Because this is very simple situation, shell parameter expantion is not always better than cut command.
However, situations like this example, we should use shell parameter expansion.


Goでコマンドラインオプションを処理する
Previous article

Goでコマンドラインオプションを処理する

TL;DR github.com/jessevdk/go-flagsが便利 flagパッケージ コマンドライン・ツールを作ろうと考えたとき、避けては通れないのがコマンドラインオプションを如何に処理するか、ということです。 Go言語では、標準パッケージにflagというパッケージが存在し、これを用いることでコマンドラインオプションをパースすることが出来ます。 しかし、flagパッケージでは、ロングオプションとショートオプションを一度に定義することが出来ず、また、ロングオプションであろうとショートオプションであろうと-XXXという、ハイフンが一つつく形式のオプションとなります。 これはあまり一般的ではなく[1]、便利とも言いにくいでしょう。 そこで便利なのが、jessevdk/

YAPC::Okinawa 2018 ONNASONに行ってきました
Next article

YAPC::Okinawa 2018 ONNASONに行ってきました

YAPC::Fukuoka 2017 HAKATA(行ってきたときの記事はこちら)に引き続き、YAPC::Okinawa 2018 ONNASONに行ってきました。 YAPCはPerlのイベントで、"Yet Another Perl Conference"の略です。twitterハッシュタグは前回に引き続き#yapcjapanでした(#yapcokinawaもよく使われていたようです)。 沖縄は昨年6月にOSC 2017 Okinawaで行って以来二度目です。 YAPC当日はすごい雨で、


GO TOP

🎉 You've successfully subscribed to something tech.!
OK