wfxr
7/26/2017 - 2:46 AM

zsh和bash测试命令是否存在

zsh和bash测试命令是否存在

Bash

The testing results for bash is shown in the following table, with each testing command running for 100,000 times:

TESTING COMMAND	RUNNING TIME (REAL, USER, SYS)
type ls &>/dev/null	0m1.476s, 0m0.632s, 0m0.836s
hash ls &>/dev/null	0m1.598s, 0m0.740s, 0m0.856s
command -v ls &>/dev/null	0m1.441s, 0m0.660s, 0m0.776s
which ls &>/dev/null	2m0.418s, 0m3.852s, 0m13.212s
According to the results, type and command -v are the two fastest ways to test the existence of a command in bash. I have also run the tests with either set +h or set -h, but the results do not have obvious difference.

Zsh

The testing results for bash is shown in the following table, with each testing command running for 2,000,000 times:

TESTING COMMAND	RUNNING TIME (REAL, USER, SYS)
type ls &>/dev/null	0m8.29s, 0m3.48s, 0m4.80s
hash ls &>/dev/null	0m5.92s, 0m2.49s, 0m3.42s
command -v ls &>/dev/null	0m8.85s, 0m3.61s, 0m5.18s
which ls &>/dev/null	0m8.24s, 0m3.18s, 0m5.00s
(( $+commands[ls] ))	0m4.01s, 0m3.99s, 0m0.00s
According to the results, (( $+commands[ls] )) is a clear winner in zsh.

Ref:https://www.topbug.net/blog/2016/10/11/speed-test-check-the-existence-of-a-command-in-bash-and-zsh/