對於常規的字符串定義變量值應添加雙引號,並且等號后不能 有空格,需要強引用的,則需要單引號,需要命令引用的使用反引號。
單引號:所見即所得,即輸出時會將單引號內的所有內容都原樣輸出,或者描述為單引號里面看到的什么就輸出什么,這成為強引用。
雙引號:輸出雙引號的所有內容;如果內容中有命令(要反引)、變量、特殊轉義,會先把變量、命令、轉義字符解析出結果,然后在輸出最終內容,這稱為弱引。
反引號:一般用於命令,執行的時候命令會被執行,相當於$(),賦值和輸出都要用反引號引起來。
[root@localhost ~]# time=date [root@localhost ~]# echo $time date
[root@localhost ~]# time=`date` [root@localhost ~]# echo $time 2019年 08月 01日 星期四 08:14:11 CST
[root@localhost ~]# time="`date`" [root@localhost ~]# echo $time 2019年 08月 01日 星期四 08:21:15 CST [root@localhost ~]# time='`date`' [root@localhost ~]# echo $time `date`
[root@localhost ~]# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin [root@localhost ~]# echo `$PATH` -bash: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin: 沒有那個文件或目錄 [root@localhost ~]# echo "$PATH" /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin [root@localhost ~]# echo '$PATH' $PATH
[root@localhost ~]# time="現在是北京時間:`date`" [root@localhost ~]# echo $time 現在是北京時間:2019年 08月 01日 星期四 08:24:25 CST [root@localhost ~]# time='現在是北京時間:`date`' [root@localhost ~]# echo $time 現在是北京時間:`date`
[root@localhost ~]# time="現在是北京時間:\b`date`" [root@localhost ~]# echo $time 現在是北京時間:\b2019年 08月 01日 星期四 08:25:19 CST
[root@localhost ~]# time='現在是北京時間:`date`' [root@localhost ~]# echo $time 現在是北京時間:`date`
其實在shell中 echo的參數e能夠解析轉義字符,在單引或者雙引的情況下都能夠解析。
-e 啟用下列反斜杠轉義的解釋
[root@localhost ~]# time="我們都是\n好孩子" [root@localhost ~]# echo -e $time 我們都是 好孩子 [root@localhost ~]# time='我們都是\n好孩子' [root@localhost ~]# echo -e $time 我們都是 好孩子
不用“”在shell解釋器中能否轉義,需要進一步驗證,建議代碼中使用“”定義轉義符。