在bash中,$、*、?、[、]、’、”、`、\、有特殊的含義。類似於編譯器的預編譯過程,bash在掃描命令行的過程中,會在文本層次上,優先解釋所有的特殊字符,之后對轉換完成的新命令行,進行內核的系統調用。
其中,反引號類似於函數調用,而不僅僅是簡單的文本替換及匹配。
命令行中,被單引號引用的部分,其中所有的特殊字符按照普通字符解釋;
雙引號引用的部分,僅解釋$(美元符號)、\(\n \t除外)、`(反引號),解釋后的文本僅按照普通文字處理(同單引號)。
反引號相當於命令替換,引用的部分優先執行,將運行結果替換到外層的命令行文本中;反引號可以嵌套,但是嵌套時內部的反引號必須用\轉義
反斜杠用於命令換行,以及echo -e解釋。
網上各種文章常見的例子,其中第二行重點介紹一下:
# x=*
# echo $x 此行執行了兩次替換,將$x替換為*,之后將*替換為當前目錄下所有文件列表的文本,
該文本作為參數賦給echo(bash會自動按照優先級,進行多層次替換 )
hello.sh menus.sh misc.sh phonebook tshift.sh
# echo '$x' $x不進行任何解釋,直接將文本‘$x’作為參數賦給echo
$x
# echo "$x" $x替換為*,但是由於在雙引號內,*不做替換,因此文本“*”將作為參數賦給echo
*
Tips:
大多數Linux Distribution的默認shell為bash,查詢當前主機所有shell可執行如下命令:
$ cat /etc/shell
bash內部集成了40多條命令,通用格式為:
$ 命令 [-選項] [參數]
其中,”-“后為單字符選項,"--"后為完整的單詞選項。一般來說,命令的某項功能(feature),會同時支持單字符選項及對應的多字符選項。
在bash中,*、?、[、]有特殊的含義,用於字符匹配。*代表0到多個字符,?代表單個字符。[]用於匹配單個字符,內部用短橫線按照ASCII碼順序標明匹配的字符范圍,或者枚舉所有要匹配的字符。
在編寫shell腳本時對於引號的應用也是十分重要的,這里總結一下三種引號的特點。