20.4 Shell 字元串 (從新手到菜鳥的Linux教程)
原文鏈接 (在知乎編輯 Markdown 簡直就是災難QAQ)
好的,我抓緊把這個坑填上就可以安利其他有趣的命令了(
我們提到過 shell 是弱類型的語言,除了數字和數組類型以外好像也就字元串類型了。個人感覺用 shell 的時候字元串類型是最多的,因為你看傳參數是用字元串,就連循環
for i in `seq 1 10`ndon ...ndonen
i
的取值 seq 1 10
都是字元串類型。記得某篇文章說過 Lisp 系統比類 Unix 系統高端之處就在於前者用表傳參,而後者是用字元串傳參= =
shell 里寫字元串字面值有兩種方式:用單引號或雙引號包裹字面值。如:
$ echo Hello World!nHello World!n$ greetingString="Hello World!"n$ echo $greetingStringnHello World!n
在很多腳本語言里單引號和雙引號包裹是沒有區別的,但是在 shell 里確實是有區別的。
- 單引號包裹的字面值不進行轉義,遇到第一個匹配的單引號停止包裹。如:
$ echo Broken pair of quote .n> ^Cn$ echo Broken pair of quote .n> ^Cn$ n
因此在向 curl
等命令傳 cookies 數據時,如果沒有需要替換的變數,單引號包裹是最好的。
思考題:如果想要輸出一個單引號應該怎麼辦呢?
- 雙引號包裹的字面值進行變數替換、轉義字元替換、反引號替換和(很不常用的)歷史記錄替換
- 變數替換比較好理解,就是
$val
或者${val}
會被其變數的值所替換,如:
$ echo "The string is $greetingString."nThe string is Hello World!.n$ echo "Or in another usage: ${greetingString}."nOr in another usage: Hello World!.n
這裡我們也注意到了雙引號包裹的字面值中單引號沒有特殊用途,而且不需要被 escape :
$ echo "The single quote looks like , but not ."nThe single quote looks like , but not .n
- 轉義字元替換。文檔里寫了長長的一列,但我覺得經常用到的也就:
n
換行 t
製表符 轉義符本身
」
雙引號
個人習慣是琢磨一下哪裡輸出有問題就加一個試試看……
- 反引號替換,就是獲得命令的結果然後插入到字元串末模板中,如:
$ echo "Time for now is `date`."nTime for now is Fri Jan 26 14:08:26 CST 2018.n
雙引號變數替換有另一些(八輩子都用不到)的語法我就不寫了= =
推薦閱讀:
※有哪些 Bash 的替代語言?
※linux運維學不懂,很絕望, 求正確方法?
※如何評價 Windows 版「bash」(及其相關 *nix 子系統)?
TAG:Bash |