Last updated on December 10, 2016
In both bash and zsh, there are multiple methods to check whether a command exists. In this post, a set of speed tests will be performed on them to find the fastest way in each of the two shells (NOT to compare the two shells). We will test 5 different methods (foobar
is the command to test for existence in the list):
type foobar &> /dev/null
hash foobar &> /dev/null
command -v foobar &> /dev/null
which foobar &> /dev/null
(( $+commands[foobar] ))
(zsh only)
All the methods listed above will have a return status of zero if the command foobar
exists, otherwise non-zero. That is, after replacing testing-command
by any of the commands listed above, you can test the existence of the command foobar
by executing testing-command && echo exist || echo non-exist
.
Throughout this post, ls
will be the command that is used for testing existence, which does exist on the system which runs the tests. The test environment is Debian Jessie with bash 4.3.30 and zsh 5.0.7 on Intel Xeon processor E3-1240 v3 (8 MB Cache, 3.4 GHz). The test scripts are also available at the end of the post.
Continue reading →