linux shell中單引號、雙引號、反引號、反斜杠的區(qū)別
更新時間:2013年01月23日 17:23:51 作者:
shell可以識別4種不同類型的引字符號: 單引號字符' 雙引號字符" 反斜杠字符\ 反引號字符`的區(qū)別,學習shell編程的朋友可以看下
1. 單引號 ( '' )
# grep Susan phonebook
Susan Goldberg 403-212-4921
Susan Topple 212-234-2343
如果我們想查找的是Susan Goldberg,不能直接使用grep Susan Goldberg phonebook命令,grep會把Goldberg和phonebook當作需要搜索的文件
# grep 'Susan Gold' phonebook
Susan Goldberg 403-212-4921
當shell碰到第一個單引號時,它忽略掉其后直到右引號的所有特殊字符
2. 雙引號 ( " " )
雙引號作用與單引號類似,區(qū)別在于它沒有那么嚴格。單引號告訴shell忽略所有特殊字符,而雙引號只要求忽略大多數(shù),具體說,括在雙引號中的三種特殊字符不被忽略:$,\,` ,即雙引號會解釋字符串的特別意思,而單引號直接使用字符串.如果使用雙引號將字符串賦給變量并反饋它,實際上與直接反饋變量并無差別。如果要查詢包含空格的字符串,經(jīng)常會用到雙引號。
# x=*
# echo $x
hello.sh menus.sh misc.sh phonebook tshift.sh
# echo '$x'
$x
# echo "$x"
*
這個例子可以看出無引號、單引號和雙引號之間的區(qū)別。在最后一種情況中,雙引號告訴shell在引號內(nèi)照樣進行變量名替換,所以shell把$x替換為*,因為雙引號中不做文件名替換,所以就把*作為要顯示的值傳遞給echo。 對于第一種情況需要進一步說明,shell在給變量賦值時不進行文件名替換(這從第三種情況中也能看出來),各步驟發(fā)生的精確次序如下: shell掃描命令行,把x的值設為星號*;
shell再次掃描命令行,碰到星號*,把它替換成當前目錄下的文件清單;
shell啟動執(zhí)行echo命令,把文件清單作為參數(shù)傳遞給echo.
這個賦值的先后次序非常重要:shell先作變量替換,然后作文件名替換,最后把這行處理為參數(shù)
3. 反引號(``)
命令替換是指shell能夠將一個命令的標準輸出插在一個命令行中任何位置。shell中有兩種方法作命令替換:把shell命令用反引號或者$(...)結構括起來,其中,$(...)格式受到POSIX標準支持,也利于嵌套。
# echo The date and time is `date`
The date and time is 三 6月 15 06:10:35 CST 2005
# echo Your current working directory is $(pwd)
Your current working directory is /home/howard/script
4. 反斜杠 backslash-escaped( \ )
反斜杠一般用作轉義字符,或稱逃脫字符,linux如果echo要讓轉義字符發(fā)生作用,就要使用-e選項,且轉義字符要使用雙引號
echo -e "\n"
反斜杠的另一種作用,就是當反斜杠用于一行的最后一個字符時,shell把行尾的反斜杠作為續(xù)行,這種結構在分幾行輸入長命令時經(jīng)常使用。
# grep Susan phonebook
Susan Goldberg 403-212-4921
Susan Topple 212-234-2343
如果我們想查找的是Susan Goldberg,不能直接使用grep Susan Goldberg phonebook命令,grep會把Goldberg和phonebook當作需要搜索的文件
# grep 'Susan Gold' phonebook
Susan Goldberg 403-212-4921
當shell碰到第一個單引號時,它忽略掉其后直到右引號的所有特殊字符
2. 雙引號 ( " " )
雙引號作用與單引號類似,區(qū)別在于它沒有那么嚴格。單引號告訴shell忽略所有特殊字符,而雙引號只要求忽略大多數(shù),具體說,括在雙引號中的三種特殊字符不被忽略:$,\,` ,即雙引號會解釋字符串的特別意思,而單引號直接使用字符串.如果使用雙引號將字符串賦給變量并反饋它,實際上與直接反饋變量并無差別。如果要查詢包含空格的字符串,經(jīng)常會用到雙引號。
# x=*
# echo $x
hello.sh menus.sh misc.sh phonebook tshift.sh
# echo '$x'
$x
# echo "$x"
*
這個例子可以看出無引號、單引號和雙引號之間的區(qū)別。在最后一種情況中,雙引號告訴shell在引號內(nèi)照樣進行變量名替換,所以shell把$x替換為*,因為雙引號中不做文件名替換,所以就把*作為要顯示的值傳遞給echo。 對于第一種情況需要進一步說明,shell在給變量賦值時不進行文件名替換(這從第三種情況中也能看出來),各步驟發(fā)生的精確次序如下: shell掃描命令行,把x的值設為星號*;
shell再次掃描命令行,碰到星號*,把它替換成當前目錄下的文件清單;
shell啟動執(zhí)行echo命令,把文件清單作為參數(shù)傳遞給echo.
這個賦值的先后次序非常重要:shell先作變量替換,然后作文件名替換,最后把這行處理為參數(shù)
3. 反引號(``)
命令替換是指shell能夠將一個命令的標準輸出插在一個命令行中任何位置。shell中有兩種方法作命令替換:把shell命令用反引號或者$(...)結構括起來,其中,$(...)格式受到POSIX標準支持,也利于嵌套。
# echo The date and time is `date`
The date and time is 三 6月 15 06:10:35 CST 2005
# echo Your current working directory is $(pwd)
Your current working directory is /home/howard/script
4. 反斜杠 backslash-escaped( \ )
反斜杠一般用作轉義字符,或稱逃脫字符,linux如果echo要讓轉義字符發(fā)生作用,就要使用-e選項,且轉義字符要使用雙引號
echo -e "\n"
反斜杠的另一種作用,就是當反斜杠用于一行的最后一個字符時,shell把行尾的反斜杠作為續(xù)行,這種結構在分幾行輸入長命令時經(jīng)常使用。
相關文章
ubuntu使用root用戶登錄/切換root權限的實現(xiàn)
下面小編就為大家?guī)硪黄猽buntu使用root用戶登錄/切換root權限的實現(xiàn)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-01shell編程時出現(xiàn):未預期的符號?`then'?附近有語法錯誤?或者?:?行?:?`then&
這篇文章主要介紹了shell編程時出現(xiàn):未預期的符號?`then'?附近有語法錯誤?或者?:?行?:?`then'問題,本文給大家介紹的非常詳細,需要的朋友參考下2022-12-12Linux中SELinux、Shell簡介、touch命令的應用小結
SELinux(Security-Enhanced Linux)是美國國家安全局(NSA)對于強制訪問控制的實現(xiàn),是Linux歷史上最杰出的新安全子系統(tǒng),這篇文章主要介紹了Linux中SELinux、Shell簡介、touch命令的應用知識總結,需要的朋友可以參考下2023-02-02shell中的curl網(wǎng)絡請求的實現(xiàn)
本文主要介紹了shell中的curl網(wǎng)絡請求的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02linux shell字符串內(nèi)置的常用操作(獲取長度、查找、替換)
在編寫shell程序時,經(jīng)常會涉及到字符串相關操作。有許多命令語句,如awk,sed都能夠做字符串各種操作。 事實上shell內(nèi)置一系列操作符號,能夠達到相似效果,使用內(nèi)部操作符會省略啟動外部程序等時間,因此速度會很的快。如果內(nèi)置的操作符能夠做到的,優(yōu)先使用內(nèi)置的2015-12-12