Bash

幫助理解在此上下文中使用大括號

  • December 5, 2020
[ ! -d ~/.ssh ] && mkdir ~/.ssh;

我無法理解[]這裡的用法以及這是什麼意思。雖然我理解後面的部分,但我無法 [ ! -d ~/.ssh ]與之聯繫mkdir ~/.ssh

謝謝!

這與通配無關,這是標準的外殼if條件。這[是一個用於測試的內置 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也是標準的,意思是“otherCommandcommand在成功時執行”。所以在這裡,你說“~/.ssh如果目錄不存在,請創建它:

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

引用自:https://unix.stackexchange.com/questions/622905