
[ ! -d ~/.ssh ] && mkdir ~/.ssh;
ここで使用法[]
とその意味は理解できません。後半は理解していますが[ ! -d ~/.ssh ]
理解できません。mkdir ~/.ssh
ありがとうございます!
答え1
これはワイルドカードとは何の関係もなく、標準シェルif
条件です。これは[
テストに使用されるシェル組み込みコマンド(外部コマンドでもあります)です。あなたが書いた内容は次のとおりです。
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
確認してください。 (再びbashで)~/.ssh
を使用してhelp test
さまざまなテストオプションを表示できます。ここでは、次の2つを使用します。
$ help test | grep -E -- '^ *!|-d'
-d FILE True if file is a directory.
! EXPR True if expr is false.
これは、ディレクトリでない場合は[ ! -d ~/.ssh ]
trueを意味します。~/.ssh
これがシェルが実行できるコマンドであることがわかったので、[
他のコマンドと同じように処理できます。構文command && otherCommand
も標準です。つまり、「成功した場合otherCommand
にのみ実行command
」を意味します。したがって、ここでは「~/.ssh
まだ存在しない場合はディレクトリを作成してください。
[ ! -d ~/.ssh ] && mkdir ~/.ssh;
--------------- -- ------------
| | |=======> "otherCommand"
| |================> logical AND
|=========================> "if ~/.ssh is not a directory" (command)