shell中的單引號、雙引號、反引號,shell雙引號反引號

來源:互聯網
上載者:User

shell中的單引號、雙引號、反引號,shell雙引號反引號

在shell中引號分為三種:單引號,雙引號和反引號。

單引號 ‘ 由單引號括起來的字元都作為一般字元出現。特殊字元用單引號括起來以後,也會失去原有意義,而只作為一般字元解釋。單引號用於保持引號內所有字元的字面值,即使引號內的\和斷行符號也不例外,但是字串中不能出現單引號。(注意是所有,只是單引號本身不能夠出現在其中)。

例如:

$ string=’$PATH’$ echo $string$PATH$

可見$保持了其本身的含義,作為一般字元出現。

雙引號 “ 

雙引號用於保持引號內所有字元的字面值(斷行符號也不例外),但以下情況除外:

  • $加變數名可以取變數的值

  • 反引號仍表示命令替換

  • \$表示$的字面值

  • \`表示`的字面值

  • \"表示"的字面值

  • \\表示\的字面值

  • 除以上情況之外,在其它字元前面的\無特殊含義,只表示字面值。


例如,我們假定PATH的值為.:/usr/bin:/bin,輸入如下命令:

$ TestString=”$PATH\”$PATH”$ echo $TestString.:/usr/bin:/ bin”$PATH$

讀者可以自己試一下在第二個雙引號之前不加會產生什麼結果。

 

反引號 ` 反引號(`)這個字元所對應的鍵一般位於鍵盤的左上方,不要將其同單引號(’)混淆。反引號括起來的字串被shell解釋為命令列,在執行時,shell首先執行該命令列,並以它的標準輸出結果取代整個反引號(包括兩個反引號)部分。例如:

$ pwd/home/xyz$ string=”current directory is `pwd`”$ echo $stringcurrent directour is /home/xyz$


shell執行echo命令時,首先執行`pwd`中的命令pwd,並將輸出結果/home/xyz取代`pwd`這部分,最後輸出替換後的整個結果。

利用反引號的這種功能可以進行命令置換,即把反引號括起來的執行結果賦值給指定變數。當然反引號也可以用$()來代替,並且反引號是比較老的用法。例如:

$ today=`date`$ echo Today is $todayToday is Mon Apr 15 16:20:13 CST 1999$


反引號還可以嵌套使用。但需注意,嵌套使用時內層的反引號必須用反斜線()將其轉義。例如:

$ abc=`echo The number of users is `who| wc-l``$ echo $abcThe number of users is 5$


在反引號之間的命令列中也可以使用shell的特殊字元。Shell為得到``中命令的結果,它實際上要去執行``中指定的命令。執行時,命令中的特殊字元,如$,”,?等又將具有特殊含義,並且``所包含的可以是任何一個合法的Shell命令,如:

$ lsnote readme.txt Notice Unix.dir$ TestString=”`echo $HOME ` ` ls 〔nN〕*`”$ echo $TestString/home/yxz note Notice$


其他情況,讀者可自行試之。


shell指令碼中 的 單引號與反引號經常混淆,幫我不同它們的功可以,

單引號原樣輸出,你可以記為“單調輸出”,如下原樣輸出 eval echo a 這個字串,很單調吧:
echo 'eval echo a'

反引號執行內容後輸出,可以記為“反譯輸出”,要把引號中的內容反向翻譯一下,如下要執行反綽號中的內容 eval echo a,得到 a,再執行 echo,最終輸出 a:
echo `eval echo a`
 
下邊shell語言中eval,又加單引號,又加雙引號,有什含義,單雙引號有什不同?

命令前加eval是使shell在執行命令列之前掃描它兩次(先取$裡的變數值,再賦值)。

單引號和雙引號都能關閉shell對特殊字元的處理。不同的是,雙引號沒有單引號嚴格,單引號關閉所有有特殊作用的字元,而雙引號只要求shell忽略大多數,具體的說,就是①貨幣符號②反引號③反斜線,這3種特殊字元不被忽略。 不忽略貨幣符號意味著shell在雙引號內部也進行變數名替換。

雙引號就是防止將變數名後面的字串也當作變數名的一部分,你這命令裡的單引號確實沒必要加(但=前的雙引號必須得加),我都試過了,加了也不影響,應該起個強調作用,個人敲命令的習慣。
 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.