Shell學習筆記1

有關單引號、雙引號和不加引號的簡要說明

名稱解釋
單引號所見即所得:即將單引號內的所有內容都原樣輸出,或者描述爲單引號裏面看到什麼就會輸出什麼。
反引號命令替換,指的是shell能夠將一個命令的標準輸出插在一個命令行中任何位置。
雙引號把雙引號內的所有內容都輸出出來;如果內容中有命令(要反引下)、變量、特殊轉義字符等,會先把變量、命令解析出結果,然後再輸出最終內容來。
無引號把內容輸出出來,會將含有空格的字符串視爲一個整體輸出,如果內容中有命令、變量等,會先把變量、命令解析出結果,然後再輸出最終內容來,如果字符串中帶有空格等特殊字符,則不能完整地輸出,需要改加雙引號,一般連續的字符串,數字,路徑等可以不加任何引號,不過無引號的情況最好用雙引號替代。
提示這裏的結論僅爲經驗型的結論,可能對某些語言不適合,例如:awk內部就有特殊性。

舉例:

[root@localhost ~]# x=*
[root@localhost ~]# echo $x  (顯示當前目錄下所有文件)
公共的 模板 視頻 圖片 文檔 下載 音樂 桌面
注意:文章後面解釋$x爲何會顯示當前目錄下所有文件。
[root@localhost ~]# echo '$x'  單引號,所見即所得
$x
[root@localhost ~]# echo "$x"  雙引號會把變量輸出
*

反單引號示例:

[root@localhost ~]#echo "date +%Y%m%d"  雙引號
date +%Y%m%d
[root@localhost ~]#echo 'date +%Y%m%d'   單引號
date +%Y%m%d
[root@localhost ~]#echo `date +%Y%m%d` 反單引號
20160811

對x=* ;echo $x的解釋

轉載自http://roclinux.cn/?p=1227

shell在給變量賦值時不進行文件名替換。所以當你執行x=*時,只是一個星號賦值給了x變量。真正的替換髮生在echo $x時。

詳細的步驟是這樣的:

當所在的目錄不爲空

1 當執行x=*時,shell掃描命令行,把*賦值給x。
2 當執行echo $x時,shell先將$x替換爲*
3 shell將*替換爲當前目錄下的文件列表
4 shell執行echo命令,將文件列表作爲參數傳遞給它。

步驟就是這樣,不難,只要記住:“變量賦值時不做匹配替換。shell先做變量替換,在做文件名替換,最後處理參數”。

當所在的目錄爲空時

# x=*
# echo $x
# *

x就等於*。


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