文章轉載自:bash常見特殊符號及含義
bash命令和shell腳本編程中,一些特殊字符具有特殊含義。不瞭解的人往往認爲其晦澀難懂神祕如符文,而掌握其含義則能在使用過程中起到事半功倍的效果。
本文整理bash命令中常用的特殊符號並簡要說明其意義,希望對常用bash等shell的人有幫助。文章主要參考tldp的Advanced Bash-Scripting Guide,英文不熟悉的網友可查看linux中國刪減版的翻譯:Bash 中的特殊字符大全。本文不求全(太多特殊的符號很少用到),更注重常見易用易懂的特殊字符(比如$_很常用,但上述兩個文檔中均沒有),讓讀者看完後能迅速上手。
簡單的特殊字符
- !:最直接的功能是邏輯非,最常用的功能是操作歷史命令(注意此功能不能用在shell編程中)。例如!!執行上一條命令,!$指代上一條命令的最後一個單詞,!#指代執行的整條命令,更多可參考:bash快捷鍵整理;
- ,:最直接的功能是表達式分隔符,較常見的是用在${}中用於參數替代,一個逗號表示首字母小寫,兩個逗號表示全部小寫(bash 4.0版本添加的功能):
var=FooBar
echo ${var,} // 結果是fooBar
echo ${var,,} // 結果是foobar
-
.:最常見的功能是當前目錄,有用的功能是代替
source
命令,其他功能包括正則表達式中的任意字符 - ::空命令(返回0),也常用作PATH等環境變量中的分隔符,神奇的功能是可以作函數名
- ;:命令分隔符
- ~:用戶主目錄,代替$HOME環境變量
- #:註釋符號,也是字符串裁截符
-
&:讓程序放入後臺執行,可單獨使用,也常配合
nohup
一起讓程序脫離當前終端 - /:文件夾分隔符,單獨代表根目錄,也是除號
- *:最常用是匹配通配符,也是乘號
- \:轉義或換行
-
-:常用功能的是命令短選項,例如
ls -ah
;實用的用法是單獨使用代表前一個目錄,以及取代標準輸入輸出;也是減號 - +:常用在正則表達式中表示至少匹配一次,也是加號
- |:管道
- ?:匹配一個字符,或正則表達式中的0-1次匹配,也是三元運算符
- ..:上級目錄
- <<:here-doc
- --:最常用的是長選項符號,神奇的用法是單獨使用時代表後面參數不做解析,也是遞減符號
- <<<:here-string,與<<的區別是不用手動輸入
- &&, ||:邏輯與和邏輯或,常用在測試結構或多條命令有條件執行
- >, <, >>, &<, >&:輸入輸出重定向
-
{} ;:
find
命令中與-exec
一起使用,代表文件的絕對路徑。注意反斜杆和分號都不能省略
以$開頭的特殊字符
$符號除引用變量、執行子命令外,還有許多晦澀但又有用的黑魔法。其經常出現在hell腳本、makefile文件中,因此非常有必要掌握。本節特地選出常見的用法。
- $$:當前腳本的進程id
- $!:上一個後臺進程的id
- $#:參數個數
- $[0-n]:第0-n個參數,第0個參數即命令本身
- $?:上一條命令的退出碼,用來判斷命令是否執行成功
- $_:上一條命令的最後一個單詞,命令行中與!$相同
- $@:全部參數(數組)
- $*:全部參數(字符串)