帮助理解 Big Bracket 在此上下文中的使用

帮助理解 Big Bracket 在此上下文中的使用
[ ! -d ~/.ssh ] && mkdir ~/.ssh;

我无法理解这里的用法[]以及这是什么意思。虽然我理解后面的部分,但我无法[ ! -d ~/.ssh ]理解mkdir ~/.ssh

谢谢你!

答案1

这与通配符无关,这是标准的 shellif条件。这[是一个用于测试的 shell 内置命令(也是外部命令)。你所写的相当于这样:

if [ ! -d ~/.ssh ]; 
then 
    mkdir ~/.ssh
fi

正如help [(在 bash 中)所解释的:

$ help [
[: [ arg... ]
    Evaluate conditional expression.
    
    This is a synonym for the "test" builtin, but the last argument must
    be a literal `]', to match the opening `['.

在这里,我们使用测试-d来检查是否~/.ssh是一个目录。您可以使用help test(再次在 bash 中)查看各种测试选项。在这里,我们使用这两个:

$ help test | grep -E -- '^ *!|-d'
      -d FILE        True if file is a directory.
      ! EXPR         True if expr is false.

这意味着如果不是目录,[ ! -d ~/.ssh ]则为真。~/.ssh

现在我们知道这[是 shell 可以运行的命令,它可以像其他命令一样对待。语法command && otherCommand也是标准的,意味着“otherCommand仅在command成功时运行”。所以在这里,您说的是“~/.ssh如果目录尚不存在,则创建该目录:

[ ! -d ~/.ssh ] && mkdir ~/.ssh;
--------------- -- ------------
       |        |        |=======> "otherCommand"
       |        |================> logical AND
       |=========================> "if ~/.ssh is not a directory" (command)

相关内容