Bash test and new test command
本文介绍了 [
和 [[
这两个命令的各种细微区别。简单来说 [
是命令 /bin/[
, 而 [[
是则是 keyword,二者都用于比较,前者可以在任何 POSIX shells 中运行,后者只能在特定 shell 如 bash zsh ksh 等中运行。 你可以认为 [
是 test
的语法糖,除了它必须在命令的末尾加上 ]
. [[
是 [
的改良版,是一个 keyword 而不是 program => 设想 bash 在解析 [[
前会有一个单独的 parsing context 处理其中的参数,这使我们在使用时可以绕开 wordsplitting, glob 等自动扩展,从而避免掉各种 quote。
一般来说如果考虑到可移植性,要移植到全 POSIX 平台,考虑使用 [
并且不开 extension,否则就用 [[
即可。