終於知道 Shell 中單引號雙引號的區別了

2022-09-14 10:09:11 字數 2467 閱讀 3492

在編寫 shell 指令碼或輸入命令時,你可能已經注意到大多數命令都可以使用單引號 或雙引號, 這不僅適用於 shell 指令碼,而且適用於所有 bash 命令, 但是兩種型別的引號以及 bash shell 解釋它的方式之間存在一定的差異,下面將介紹它們之間的不同

用單引號' '括起來的字元會保留引號內每個字元的字面值

簡而言之,shell 將逐字解釋單引號內的封閉文字,並且不會插入任何內容,包括變數、反引號、某些\轉義符等

單引號中的任何字元都沒有特殊含義, 當你不想使用轉義字元來更改 shell 指令碼解釋輸入字串引數方式時,就會很方便

雙引號類似於單引號,只是它允許 shell 解釋美元符號 ( $ )、反引號 (`)、反斜槓 ( \ ) 和感嘆號 ( ! ), 這些字元與雙引號一起使用時具有特殊含義,並且在顯示之前對其進行評估

雙引號可以通過在雙引號前加上反斜槓來使用其自身

下面通過幾個例項來說明 單引號 和 雙引號之間的一些區別

新建 shell 指令碼t1.sh,內容如下

#!/bin/bash

a=98

echo "$a"

echo '$a'

執行./t1.sh命令,結果如下

[root@localhost quotes_test]# ./t1.sh 

98$a

從結果可以看出,雙引號中的$a被解釋為變數a的值

但是單引號中的$a只是原樣輸出,單引號不會解釋其中的$以及a字元

雙引號中的\\n會被轉義成換行符\n,但在單引號內,\n被當成普通字元與同一行的其他字元一起顯示

新建 shell 指令碼t2.sh, 內容如下

#!/bin/bash

ary[0]=8

echo "$"

echo '$'

執行指令碼,結果如下

[root@localhost quotes_test]# ./t2.sh 

8$

從結果可以看出,當 $ 用雙引號括起來時,表示陣列的第乙個元素,所以輸出8但是,被單引號括起來時,被當做單純的字元輸出,並不會解釋為陣列的第乙個元素

新建 shell 指令碼t3.sh, 內容如下

#!/bin/bash

a=45

echo "'$a'"

echo '"$a"'

執行指令碼,結果如下

[root@localhost quotes_test]# ./t3.sh 

'45'

"$a"

由上面的結果可知,單引號在雙引號內沒有特殊的含義,因此,即使$a在單引號內,也還是會解釋成45但是,當雙引號在單引號內時,即使$a位於雙引號內,也不會對變數a求值, 還是按照普通字元輸出

新建 shell 指令碼t4.sh, 內容如下

#!/bin/bash

a=" $(printf hello) " # 相當於 " `printf hello` "

b=' $(printf hello) ' # 相當於 ' `printf hello` '

echo $a

echo $b

執行指令碼,結果如下

[root@localhost quotes_test]# ./t4.sh 

hello

$(printf hello)

從結果可以知道,雙引號中的$(printf hello)會被解釋成 printf hello 命令,執行echo $a命令相當於執行了printf hello, 結果輸出hello單引號中的$(printf hello),只是表示普通字元而已,所以echo $b命令的結果是 $(printf hello) 字元的原樣輸出

本文介紹了 shell 中單引號和雙引號的區別,主要是通過例項的方式來展示他們之間的不同點,熟悉了它們的不同點後,在編寫 shell 指令碼過程中,就不會在單雙引號上出錯了

Linux Shell 中的反引號,單引號,雙引號

反引號位 位於鍵盤的tab鍵的上方 1鍵的左方。注意與單引號 位於enter鍵的左方的區別。在linux中起著命令替換的作用。命令替換是指shell能夠將乙個命令的標準輸出插在乙個命令列中任何位置。如下,shell會執行反引號中的date命令,把結果插入到echo命令顯示的內容中。root loca...

Linux Shell 中的反引號,單引號,雙引號

反引號位 位於鍵盤的tab鍵的上方 1鍵的左方。注意與單引號 位於enter鍵的左方的區別。在linux中起著命令替換的作用。命令替換是指shell能夠將乙個命令的標準輸出插在乙個命令列中任何位置。如下,shell會執行反引號中的date命令,把結果插入到echo命令顯示的內容中。root loca...

Linux Shell 中的反引號,單引號,雙引號

反引號位 位於鍵盤的tab鍵的上方 1鍵的左方。注意與單引號 位於enter鍵的左方的區別。反引號在linux中起著命令替換的作用。命令替換是指shell能夠將乙個命令的標準輸出插在乙個命令列中任何位置。root localhost sh echo the date is date root loc...