Linux Bash Shell學習(二十):命令列處理

來源:互聯網
上載者:User

 

  本文也即《Learning the bash Shell》3rd Edition的第七章Input/Output and Command-Line Processing之讀書筆記之四。我們的目的是把書讀薄。我們將審視Linux系統如何解析bash。

 

第一步驟
:將命令分給為token,根據空格,TAB, NEWLINE, ;, (, ), <, >, |, 以及 &。

第二步驟
:檢查第一個token是否一些關鍵字,是否是引號,’/’是否是一個需要組合的符號,例如’{‘或者’(‘,看看是否需要讀取下一行命令,如果需要,回到第1步驟,如此迴圈,直到擷取完整的命令。如果不是組合命令的開始,而是其他關鍵字,例如結束fi等,報告語法錯誤。如果不是這些關鍵字,進入第3步驟。

第三步驟
:根據alias列表檢查命令的第1個tocken,它取得alias的對應,重新回到第1步驟。回到第一步驟,允許alias的嵌套,就A表示B,B表示C,也允許alias表示一些整合命令的開頭。

第四步驟
:大括弧解析。例如將a{b,c},解析為ab ac。

第五步驟
:波浪號(~)解析,如果在一個詞的最前,解釋為使用者的$HOME目錄路徑。

第六步驟
:參數解析。如果詞開始為$,解析這個參數變數。

第七步驟
:是否因$的解析而產生命令替換。

第八步驟
:對$((string))的格式進行數學運算。

第九步驟
:經過第5步驟開始的幾個步驟,重新將詞分離,使用$IFS作為分隔字元號。

第十步驟
:路徑名處理,萬用字元處理,包括*,?,/。

第十一步
:根據命令的第一個詞去查看,優先權一次是function命令,builtin,$PATH路徑下的命令。

第十二步
:在設定重新導向I/O後執行命令

  這隻是其中的一些步驟,並不是所有的。我們通過一個例子做進一步的解釋。在執行這個命令之前,已經通過alias ll=”ls -l”。使用者目錄為/home/alice,$$的值為2537。看看執行命令ll $(type -path cc) ~alice/.*$(($$%1000))的過程。

  1. ll

    $(type

    -path

    cc)

    ~alice/.*$(($$%1000))

    分為各個詞

  2. ll

    不是keyword,所以第二步驟無需處理任何

  3. ls

    -l

    $(type

    -path

    cc)

    ~alice/.*$(($$%1000))

    將ls -l來替代別名"ll".這是將重複第一步到第三步。

  4. ls

    -l

    $(type

    -path

    cc)

    ~alice/.*$(($$%1000))

    在第四步不處理任何

  5. ls

    -l

    $(type

    -path

    cc)

    /home/alice/.*$(($$%1000))

    進行路徑解析,將 ~alice解析為/home/alice

    .

  6. ls

    -l

    $(type

    -path

    cc)

    /home/alice/.*$((2537%1000))

    將$$接續為2537。$$的用法在以後學習。

  7. ls

    -l

    /usr/bin/cc

    /home/alice/.*$((2537%1000))

    執行命令,替換"type -path cc".

  8. ls

    -l

    /usr/bin/cc

    /home/alice/.*537

    進行算術運算。

  9. ls

    -l

    /usr/bin/cc

    /home/alice/.*537

    第九步無處理。

  10. ls

    -l

    /usr/bin/cc

    /home/alice/.hist537

    將檔案名稱替代了萬用字元.*537。

  11. 在/usr/bin

    中獲得ls命令

  12. /usr/bin/ls

    是帶選項-l以及兩個參數執行的

相關連結: 我
的Linux操作相關文章

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.