Bash
幫助理解在此上下文中使用大括號
[ ! -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
也是標準的,意思是“otherCommand
僅command
在成功時執行”。所以在這裡,你說“~/.ssh
如果目錄不存在,請創建它:[ ! -d ~/.ssh ] && mkdir ~/.ssh; --------------- -- ------------ | | |=======> "otherCommand" | |================> logical AND |=========================> "if ~/.ssh is not a directory" (command)