在 bash 中,您可以進行多行注釋,如下所示:
: '
echo "You will never see this message :)"
'
但為什么它只會這樣呢?如果在冒號后沒有空格,則會發生錯誤。而且,如果我用撇號中的回聲做了上面的操作,機器仍然不會讀取它。
: '
echo 'You will also never see this message :D'
'
而且周圍沒有任何東西:
: '
echo You will never see these messages :(
這是如何作業的,為什么我在 bash 中查找的關于多行注釋的所有內容都告訴我沒有這樣的事情?
uj5u.com熱心網友回復:
冒號:是一個內置的 bash 命令,基本上什么都不做。
從 bash 檔案中:
除了擴展引數和執行重定向之外什么都不做。回傳狀態為零。
因此,您可以將其:視為可以向其傳遞引數的任何其他 bash 命令。所以它不是評論,但它有點像評論,因為它和傳遞給它的每個引數都是空操作。您可以通過創建“評論”功能來完成同樣的事情:
comment () {}
comment echo 'You will never see this message'
后面需要:空格,因為沒有空格,整個東西就變成了命令名。例如,如果您運行:
:echo 'You will never see this message'
Bash 認為這是運行一個:echo帶有引數“你將永遠不會看到這條訊息”的命令。它回傳一個錯誤,因為沒有這樣的命令。
第二部分是 bash 如何處理不匹配的引號。Bash 將繼續讀取資料,直到遇到匹配的引號。因此,在您的多行示例中,您將一個引數傳遞給:命令(在第一個示例中)或填充多個引數(在第二個示例中)。
uj5u.com熱心網友回復:
這不是評論。但它沒有效果,所以它似乎是一個評論。但它是由 bash 決議和評估的:如果你不正確地使用它,你可能會引入語法錯誤。
了解 shell 語法的一些基本構建塊和一些內置命令將有助于理解這一點。
shell(例如bash)讀取命令,從用戶輸入中找出命令名稱和引數,然后運行帶有引數的命令。
例如:
echo hi
由 shell 決議為echo帶有 1 個引數的命令hi。
通常,shell 基于空格/制表符吐出東西。這就是為什么它決議echo hi為兩件事。您可以使用單引號和雙引號來告訴它以不同的方式決議事物:
echo 'foo bar' baz 'ignore me'
由 shell 決議為echo帶有引數foo bar和baz的命令ignore me。請注意,引號不是引數的一部分,它們由 bash 決議和洗掉。
另一個難題是內置:命令。man :會告訴你這是命令什么都不做。它決議引數,做方向,但它自己什么也不做。
這意味著當您輸入以下內容時:
: 'echo hi'
Bash 將其決議為:帶有引數的命令echo hi。然后運行命令并丟棄輸出。這沒有任何效果,所以感覺就像是評論(但實際上不是,不像#評論字符)。
: '
echo 'You will also never see this message :D'
'
被 bash 決議為:帶引數的命令\necho (即,換行符后跟echo )、You、will、also、never、see、this,message :D然后\n(即換行符)。然后 bash 運行這個命令。這什么也沒做,所以它再次表現得更像一個評論。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/439437.html
上一篇:創建自定義超級用戶django
