shell中單引號、雙引號、反引號的用法及區別

單引號

這個比較暴力,不管單引號裏面有什麼都原樣輸出,無視一切變量,所見即所得。如果要用來做字符比較和輸出,注意不能輸出變量,也不認識通配符,命令等。

even@ubuntu:~$ echo 'a$PATH --aa\*'
a$PATH --aa\*

雙引號

雙引號感覺就相對友好,如果內容中有變量、特殊轉義符等,會先把變量、轉義字符解析出結果,然後再輸出最終內容。

even@ubuntu:~$ echo "a$PATH --aa\\*"
a/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/ffmpeg/bin --aa\*

雙引號裏面也可以有命令,但要用反引號引一下,比如下面這樣

even@ubuntu:~/test$ echo "`ls -l` a$PATH --aa\\*"
total 268
-rw-r--r-- 1 even even 259626 Oct 30 10:40 693fnet.log
-rw-r--r-- 1 even even    837 Aug 21 15:47 check4gnet.sh
drwxrwxr-x 2 even even   4096 Dec 12 03:09 python
drwxrwxr-x 3 even even   4096 Oct 12 16:58 wifidetect-openwrt a/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/ffmpeg/bin --aa\*
even@ubuntu:~/test$ 

雙引號中只有$ \ ` 不被忽略 其他的都會被忽略,比如*和?通配符。這個在做比較和運算的時候要特別注意。比如:

a="123"
b="12345"
if [[ $b == "$a*" ]]

這裏結果就是false。

反引號

一般用於命令引用,命令的執行。
反引號是相對古老一點的用法,現在多用$()來執行命令。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章