shell 脚本中方括号的用途

Purpose of square brackets in shell scripts

我在其中一个 shell 脚本中看到了这一行:

[-f $host_something ] && .$host_something

带有 -f 开关的方括号应该做什么,将它与相同的环境变量进行与运算有什么意义?

[ 实际上是一个实际的二进制文件。它是 test(1) 命令的别名。它会忽略它的最后一个参数,应该是 ]。 运行 man test 了解更多信息。这不是真正的 shell 语法。

方括号实际上是 test 工具的别名,因此您可以查看 man test 以了解其工作原理。 -f 开关是此工具可以 运行 进行的众多测试之一,用于测试文件是否存在以及是否为常规文件。

您需要更多空间。
命令

[ -f $host_something ] && . $host_something

代表

if [ -f $host_something ]; then
   source $host_something
fi

或文字:
当变量 host_something 中给出的文件确实是一个文件时,则在不打开子 shell 的情况下执行该文件中的行。您不需要子 shell,因为一旦子 shell 完成,子 shell 中的所有设置都会丢失。