思考Bash中的Globbing與Quoting
紫式晦澀每日一篇文章第11天
前言
-
今天是2022年第9天, 全年第2週, 一月的第二個週日. 今天來組織educative課程裡面關於Bash相關的知識.
-
今天的素材主要來自educative 課程-Master the Bash Shell-Core Bash 中, 節選相關段落與紀錄個人理解與心得.
Bash是shell程序
- 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在一起.
-
其他的shell程序: 市面上還有其他的shell程序, 包含
sh
,ash
,dash
,ksh
,tcsh
,zsh
,tclsh
. 只有看過sh
. -
Bash的歷史: Bash原名 ‘Bourne Again SHell’. 是‘Thompson Shell’ 的後代. 其兄弟有‘siblings’ (eg,
ksh
), ‘cousins’ (eg,tcsh
), and ‘children’, (eg,zsh
).
Globbing與Quoting
-
*
指令的意思: shell轉換*
轉換, 配對到「current working directory的所有檔案」. -
正規表達式:正規表達式是用來matching字串的模式. 與globbing達到的matching檔案不一樣.
-
glob: 在電腦編程中, glob模式指定一組帶著通配符的檔案名字 In computer programming, glob patterns specify sets of filenames with wildcard characters.
-
例子: 看所有在工作目錄中的檔案:
-
- 製造三個檔案
file1
,file2
,file3
.
- 製造三個檔案
-
- 用
ls
看存在的檔案, match*
- 用
-
- 用
echo
印出檔案, match*
.
- 用
-
Quoting:用單引號「
*
」與雙引號「*
」會改變bash讀取內容的方式. 在變數環節會學到更多. -
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的, 有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
- 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
-
單點
.
表示目前檔案夾: single dot folder.
表達目前在的檔案夾.cd .
就會在原地不動 -
雙點
..
表示雙親檔案夾: double dot folder..
表達雙親檔案夾.cd ..
會到上一層.
後記
-
到此學習了educative 課程-Master the Bash Shell-Core Bash 中前兩節的內容. 首先了解Bash是一種Shell 程序, 主要讓我們能與把不同的program一起合作. 接下來看了globbing, 關於
*
表達「目前工作目錄的所有檔案」有了基礎認識; 接著quoting則提到單引號雙引號, 會有不同的效果. 可惜還沒精力讀到variable的章節, 之後再來思考quoting的深刻用法. -
今天看了很不熟的主題-Bash編程, 知道的很少, 所以得慢慢前進. 接下來一年要主力投資工程技能, 增加工程能力去做更寬廣的研究. 實踐數學, 用最新科技, 創造新價值, 推動時代. 天天向上, 共勉之!
2022.01.09. 紫蕊 於 西拉法葉, 印第安納, 美國.
評論