<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] ## 模式擴展 概述 1. Bash 是先進行擴展,再執行命令,命令本身并不存在參數擴展,收到什么參數就原樣執行。這一點務必需要記住。 2. 模式擴展早于正則表達式出現,它的功能沒有正則那么強大靈活,但是優點是簡單和方便 ## `~` 擴展 用戶所在目錄 ## `?`字符擴展 `?`字符代表文件路徑里面的任意單個字符,**除空格** ``` # 存在文件 a.txt、b.txt 和 ab.txt $ ls ?.txt a.txt b.txt $ ls ??.txt ab.txt ``` ## `*`字符擴展 `*`字符代表文件路徑里面的任意數量的任意字符,包括零個字符 ``` # 存在文件 a.txt、b.txt 和 ab.txt $ ls *.txt a.txt b.txt ab.txt ``` 輸出當前目錄的所有文件 ``` ls * ``` `*`只匹配當前目錄,不會匹配子目錄 ``` # 子目錄有一個 a.txt # 無效的寫法 $ ls *.txt # 有效的寫法 $ ls */*.txt ``` ## 方括號擴展 - 匹配中括號中的字符 如果文件不存在,就會原樣輸出 ``` # 存在文件 a.txt 和 b.txt $ ls [ab].txt a.txt b.txt # 只存在文件 a.txt $ ls [ab].txt a.txt ``` 如果要匹配 `-` 只能放在最前或是最后 ``` # 存在 aaa、bbb、aba b-b 三個文件 $ ls ?[-b] ? bbb aba b-b ``` ### `[^...]`和`[!...]` 變體 - 排除括號中的字符 ``` # 存在 aaa、bbb、aba 三個文件 $ ls [!a]* bbb ``` ### `[start-end]` 擴展 表示匹配一個連續的范圍 `[a-c]`等同于`[abc]`,`[0-9]`匹配`[0123456789]` ``` # 存在文件 report1.txt、report2.txt 和 report3.txt $ ls report[0-9].txt report1.txt report2.txt report3.txt ``` * `[a-z]`:所有小寫字母。 * `[a-zA-Z]`:所有小寫字母與大寫字母。 * `[a-zA-Z0-9]`:所有小寫字母、大寫字母與數字。 * `[abc]*`:所有以`a`、`b`、`c`字符之一開頭的文件名。 * `program.[co]`:文件`program.c`與文件`program.o`。 * `BACKUP.[0-9][0-9][0-9]`:所有以`BACKUP.`開頭,后面是三個數字的文件名。 ### 否定形式[!start-end] ``` $ echo report[!1–3].txt report4.txt report5.txt ``` ### 大括號擴展 1. 大括號內部的逗號前后不能有空格 2. 表示分別擴展成大括號里面的所有值 ``` $ echo d{a,e,i,u,o}g dag deg dig dug dog ``` ``` $ ls {a,b,c}.txt ls: 無法訪問'a.txt': 沒有那個文件或目錄 ls: 無法訪問'b.txt': 沒有那個文件或目錄 ls: 無法訪問'c.txt': 沒有那個文件或目錄 ``` > 大括號擴展不是文件名擴展。它會擴展成所有給定的值,而不管是否有對應的文件存在 逗號前面可以沒有值,表示擴展的第一項為空。 ``` $ cp a.log{,.bak} # 等同于 # cp a.log a.log.bak ``` ### 大括號嵌套 ``` $ echo {j{p,pe}g,png} jpg jpeg png ``` ### 大括號與中括號區別 ``` # 不存在 a.txt 和 b.txt $ echo [ab].txt [ab].txt $ echo {a,b}.txt a.txt b.txt ``` ## {start..end} 擴展 - 大括號的簡寫新式 ``` $ echo d{a..d}g dag dbg dcg ddg $ echo Number_{1..5} Number_1 Number_2 Number_3 Number_4 Number_5 ``` 逆序 ``` $ echo {5..1} 5 4 3 2 1 ``` ### 大括號嵌套簡寫 ``` $ echo .{mp{3..4},m4{a,b,p,v}} .mp3 .mp4 .m4a .m4b .m4p .m4v ``` ### {start..end..step} 設置步長 ``` $ echo {0..8..2} 0 2 4 6 8 ``` ### 多個簡寫形式連用 ``` $ echo {a..c}-{1..3} a-1 a-2 a-3 b-1 b-2 b-3 c-1 c-2 c-3 ``` ### 實例: 創建目錄 新建36個子目錄 ``` $ mkdir {2007..2009}-{01..12} drwxr-xr-x. 2 root root 6 Oct 31 14:56 2007-01 drwxr-xr-x. 2 root root 6 Oct 31 14:56 2007-02 ... drwxr-xr-x. 2 root root 6 Oct 31 14:56 2009-11 drwxr-xr-x. 2 root root 6 Oct 31 14:56 2009-12 ``` ### 實例: 控制 `for`循環次數 ``` for i in {1..4} do echo $i done ``` ## 子命令擴展 $(commod) ``` $ echo $(date) Tue Jan 28 00:01:13 CST 2020 //等價于 反引號較老 $ echo `date` Tue Jan 28 00:01:13 CST 2020 ``` ## 算術擴展 ``` $ echo 2+2 2+2 $ echo $((2 + 2)) 4 ``` ## 量詞語法 ``` //查看 shopt 是否開啟 shopt extglob //開啟 shopt -s extglob //關閉 shopt -u extglob ``` 量詞語法用來控制模式匹配的次數 * `?(pattern-list)`:匹配零個或一個模式。 * `*(pattern-list)`:匹配零個或多個模式。 * `+(pattern-list)`:匹配一個或多個模式。 * `@(pattern-list)`:只匹配一個模式。 * `!(pattern-list)`:匹配零個或一個以上的模式,但不匹配單獨一個的模式。 ``` $ ls abc?(.)txt abctxt abc.txt $ ls abc+(.txt|.php) abc.php abc.txt ``` ## shopt `shopt`命令可以調整 Bash 的行為 ``` # 打開某個參數 $ shopt -s [optionname] # 關閉某個參數 $ shopt -u [optionname] # 查詢某個參數關閉還是打開 $ shopt [optionname] ``` ### dotglob 參數 - 擴展結果包括隱藏文件 ``` $ shopt -s dotglob $ ls * abc.txt .config ``` ### nullglob 參數 `nullglob`參數可以讓通配符不匹配任何文件名時,返回空字符 ``` $ rm b* rm: 無法刪除'b*': 沒有那個文件或目錄 //開啟 $ shopt -s nullglob $ rm b* rm: 缺少操作數 ``` 由于沒有`b*`匹配的文件名,所以`rm b*`擴展成了`rm`,導致報錯變成了”缺少操作數 ### failglob 參數 `failglob`參數使得通配符不匹配任何文件名時,Bash 會直接報錯,而不是讓各個命令去處理。 ``` $ shopt -s failglob $ rm b* bash: 無匹配: b* ``` ### nocaseglob 參數 - 讓通配符擴展不區分大小寫 ``` $ shopt -s nocaseglob $ ls /windows/program* /windows/ProgramData /windows/Program Files /windows/Program Files (x86) ``` ### globstar 參數 開啟 `** `匹配 ``` a.txt sub1/b.txt sub1/sub2/c.txt $ shopt -s globstar $ ls **/*.txt a.txt sub1/b.txt sub1/sub2/c.txt ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看