%20%E6%98%AF%E5%90%A6%E8%A2%AB%E8%A6%96%E7%82%BA%E9%81%8B%E7%AE%97%E5%AD%90%E6%88%96%E6%8C%87%E4%BB%A4%EF%BC%9F.png)
我找不到任何將其稱為其中之一的官方文件。無論如何,命令和操作員之間的技術差異到底是什麼?
答案1
答案2
一條命令:
通常有一個字母數字字串作為其名稱。
是外部 util、內建工具或函數。從這個意義上說,內建函數產生輸出的大多數內容
type
都是命令。有字首符號。
通常會更改某種 I/O。
操作員:
通常是一個符號字串,可能沒有名字,但可能有暱稱。
內建函數無法理解
type
(除非可能存在一些名稱混亂的函數或腳本)。更多時候有中綴或者後綴句法。
有時像交通警察一樣指揮 I/O,但不會改變內容在它。
有時指導流程的順序。
$()
是一個命令代換:
- 首先,(或最後,取決於我們如何看待它),它是一個字串。
- 該字串由文字組成輸出其中列出的命令。
[
是一個 shell 內建指令:
- 這是
test
帶有強制]
後綴的命令。
[[
是一個bash
shell 關鍵字:
- 它就像一個更通用、更快的
[
內建命令,但 SFAIK 沒有相應的test
類似命令。 shell 關鍵字包括
time
and之類的東西for
,它們看起來像命令,但行為更像運算符,需要各種同級關鍵字作為分隔符號和語法。此程式碼type
在內建函數的輸出上運行內建函數help
,其中顯示左側關鍵字和內建函數的清單:COLUMNS=30 help -m | tail -n +9 | tee >(cut -d ' ' -f2) >(cut -c 17-30 | cut -d ' ' -f1) > /dev/null | sort | sed -n "s/.*/type '&'/e"';/found/!p'
將其與口語進行比較:
- 命令(和一些關鍵字)就像動詞。
- 檔案和字串是名詞。
- 運算符就像標點符號和介詞。
抽象而言,運算子只是具有不同語法的命令,可以用類似的命令替換字首樣式指令以及其他指令。使用起來可能不太方便。
從分析上來說,shell 的編譯程式碼可以透過反組譯器運行,而操作符又只是命令,或者更確切地說是一系列組譯語言指令。
答案3
從使用者的角度來看,命令替換是一種 shell 原語。它是在 shell 中實現的一項功能,可以執行多個操作(啟動子 shell、執行命令...)並傳回一個值(命令的輸出)。在 shell 執行擴充之前,命令會取代通常是命令的參數。換句話說,使用者使用 shell 功能來取得 shell 進程的結果。