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,否则就用 [[ 即可。