[ ! -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)