この文脈でBig Bracketの使用を理解するのに役立ちます。

この文脈でBig Bracketの使用を理解するのに役立ちます。
[ ! -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)

おすすめ記事