MUR011 思考Bash中的Globbing與Quoting

目錄

思考Bash中的Globbing與Quoting

紫式晦澀每日一篇文章第11天

前言

  1. 今天是2022年第9天, 全年第2週, 一月的第二個週日. 今天來組織educative課程裡面關於Bash相關的知識.

  2. 今天的素材主要來自educative 課程-Master the Bash Shell-Core Bash 中, 節選相關段落與紀錄個人理解與心得.

Bash是shell程序

  1. Bash是shell程序: shell 程序通常是一個「可執行二進製文件」. 它接受鍵入的命令,並且(一旦按return)將這些命令轉換為(最終)對操作系統 API 的系統調用。 (二進制: A binary is a file that contains the instructions for a program, ie it is a ‘program’ file, rather than a ‘text’ file, or an ‘application’ file (such as a Word document).)

Shell程序: 告訴電腦做什麼. 把不同的程序glue在一起.

  1. 其他的shell程序: 市面上還有其他的shell程序, 包含sh, ash, dash, ksh, tcsh, zsh, tclsh. 只有看過sh.

  2. Bash的歷史: Bash原名 ‘Bourne Again SHell’. 是‘Thompson Shell’ 的後代. 其兄弟有‘siblings’ (eg, ksh), ‘cousins’ (eg, tcsh), and ‘children’, (eg, zsh).

Globbing與Quoting

  1. *指令的意思: shell轉換*轉換, 配對到「current working directory的所有檔案」.

  2. 正規表達式:正規表達式是用來matching字串的模式. 與globbing達到的matching檔案不一樣.

  3. glob: 在電腦編程中, glob模式指定一組帶著通配符的檔案名字 In computer programming, glob patterns specify sets of filenames with wildcard characters.

  4. 例子: 看所有在工作目錄中的檔案:

    1. 製造三個檔案file1, file2, file3.
    1. ls看存在的檔案, match *
    1. echo印出檔案, match *.
1touch file1 file2 file3
2ls *
3echo *
  1. Quoting:用單引號「*」與雙引號「*」會改變bash讀取內容的方式. 在變數環節會學到更多.

  2. Globbing primitive:

  • * - matches files in current working directory 工作目錄的檔案
  • ? - matches any single character 單字元
  • [abd] - matches any character from a, b or d 特定字元
  • [a-d] - matches any character from a, b, c or d 範圍內字元
  1. 實例: 配對檔案 找有1的, 有file數字的
1root@educative:~/glob# ls *1
2file1
3root@educative:~/glob# ls file[a-z]
4ls: cannot access 'file[a-z]': No such file or directory
5root@educative:~/glob# ls file[0-9]
6file1  file2  file3
7root@educative:~/glob# ls file?
8file1  file2  file3
  1. Dotfiles: 造了也在ls, ls*看不到的檔案們. 這樣這些檔案不會被簡單改動
1root@educative:~/glob# touch .adotfile
2root@educative:~/glob# mkdir .adotfolder
3root@educative:~/glob# touch .adotfolder/file1 .adotfolder/.adotfile
4root@educative:~/glob# ls
5file1  file2  file3
  1. 單點.表示目前檔案夾: single dot folder . 表達目前在的檔案夾. cd . 就會在原地不動

  2. 雙點..表示雙親檔案夾: double dot folder .. 表達雙親檔案夾. cd ..會到上一層.

後記

  1. 到此學習了educative 課程-Master the Bash Shell-Core Bash 中前兩節的內容. 首先了解Bash是一種Shell 程序, 主要讓我們能與把不同的program一起合作. 接下來看了globbing, 關於*表達「目前工作目錄的所有檔案」有了基礎認識; 接著quoting則提到單引號雙引號, 會有不同的效果. 可惜還沒精力讀到variable的章節, 之後再來思考quoting的深刻用法.

  2. 今天看了很不熟的主題-Bash編程, 知道的很少, 所以得慢慢前進. 接下來一年要主力投資工程技能, 增加工程能力去做更寬廣的研究. 實踐數學, 用最新科技, 創造新價值, 推動時代. 天天向上, 共勉之!

2022.01.09. 紫蕊 於 西拉法葉, 印第安納, 美國.

版權

CC BY-NC-ND 4.0

評論