在我接觸過的編程語言里面,最奇葩的兩個就屬 JavaScript 和 Shell 了。因為它們有著太多的語法糖跟特殊字符,總是能夠讓你措手不及,并且編程習慣也跟Java 和 Python 等語言大相徑庭??傊?,千萬不要因為它們是腳本語言就輕視它們,否則你就會被打得暈頭轉向。
這兩個奇葩之間比起來呢,Shell 的奇葩之處在于特殊符號多,騷操作也多。比如你以為 . 這是個點,其實它代表的意思遠不止一個點那么簡單 。
下面的內容是我根據網上資料及平時使用經驗整理的一份Shell 中的特殊字符。如果大家覺得有用的話就點贊收藏吧。
; 單分號,一般作為命令分隔符??梢詫蓚€命令放在同一行。如: echo hello; echo there,但真正寫腳本的時候盡量不要這樣寫。
;; 雙分號,用在 case條件語句的結束符。如:
case "$variable" in abc) echo "/$variable = abc" ;; xyz) echo "/$variable = xyz" ;;esac
% 百分號,用于表示取余操作,也用于正則表達式。
~ 波浪線,表示家目錄,等價于$HOME。如 cd ~
~+ 表示當前工作目錄,等價于$PWD。
~- 表示上一個工作目錄,等價于 ..。
| 管道標識符,將上一個命令的輸出作為下一個命令的輸入,經常用到,沒什么好說的。
>| 強制重定向。強制重寫已經存在的文件。
|| 表示邏輯或操作。
& 讓命令在后臺運行,例如 command & 一般用于啟動后臺進程服務。
&& 表示邏輯與操作。
* 星號,主要用于通配符匹配,當然也用于乘法表達式。
/ 主要用于轉義特殊字符,比如想轉義雙引號,可以這樣 echo /" 輸出 “。
/ 文件路徑分隔符,比如 /opt/app/projects/ 。當然也用作除法表達式。
. 點號,這個符號作用比較多。 首先可以等價于 source 命令。也可以作為文件名字,在文件名開頭,表示該文件是個隱藏文件。 還可以表示當前目錄, 比如拷貝某個文件到當前目錄 cp /opt/app/a.md . 。如果是兩個連續的點則表示上一級目錄,比如 cd ..。
最后,點號也是正則表達式的元字符。
" 雙引號,雙引號里面的變量一般會被解析成賦值的內容。比如
name=frank echo "hello $name" # hello frank
' 單引號,單引號里面的變量一般不會被解析,比如
name=frank echo 'hello $name' #hello $name
' 反引號(ESC鍵下面那個),要跟單引號區分開。反引號里面的內容會被當作指令執行,并將執行的結果賦值給變量。比如:
file=`ls ~`echo $file #家目錄下所有文件。
! 感嘆號,一般用于取反。比如 != 表示不等。騷操作在終端中執行,可以表示歷史指令比如 !-3,將會輸出你剛剛輸入的指令。但在腳本中不支持該種寫法。
** 雙星號,算術運算中表示求冪運算。比如
let "a=3**2"echo $a #9
? 問號,表示條件測試;也用作三元運算符。也是正則表達式元字符。
$ 美元符,放到變量前面,即引用一個變量的內容,比如:echo $PATH;當然也是正則表達式的元字符。
${} 參數替換。用于在字符串中表示變量值。比如
name=frankecho "hello ${name}" #hello frank
$*,$@ 這兩個特殊字符都用于獲取傳遞給腳本的所有參數。當他們被雙引號包圍時,"$*"會將所有的參數從整體上看做一份數據。而"$@"仍然將每個參數都看作一份數據,彼此之間是獨立的。
新聞熱點
疑難解答