前言
在bash shell基本文法之特殊變量的使用的一些示例中,使用echo輸出一些字元串的時候,既使用了單引用也用了雙引号,這篇博文簡單說下這兩個的差別,順便說下倒引号的用法
單引号與雙引号
在使用echo輸出字元串的時候, 會用引号(單/雙引号)将字元串括起來,在沒有特殊字元如$等的時候,隻是普通文本内容,使用單/雙引号沒有差別,下面說下不同的地方。
單引号
如果字元串中存在$等特殊字元,想要作為普通字元原樣輸出就使用單引号,這樣就不會把$後面的字元中作為變量解釋輸出
雙引号
在對待$等特殊字元上,剛好和單引号的處理相反,比如對于$緊跟的字元串作為引用的變量解釋
示例
#! /bin/bash
describe="this is a demo"
#單引号輸出,特殊字元不處理
echo 'I want to say $describe, current path: `pwd`'
#雙引号輸出,特殊字元處理
echo "I want to say $describe, current path: `pwd`"
執行結果:
總之,單引号會把其中的一些特殊字元串作為普通字元對待,雙引号解釋這些特殊字元,如變量替換
p.s. : 對于反斜線的處理,在使用echo指令的時,反斜線或者說這些轉義字元怎麼處理,是由echo指令決定的,而不是單/雙引号。也就是說,echo指令預設配置,對于反斜線,單/雙引号處理結果一樣,因為和echo配置有關。
下面是使用man指令檢視echo的文檔的一部分:
對于使用echo指令是否解釋字元串中的反斜線,是由-e/-E這兩個選項決定的。
如下:
#! /bin/bash
describe="this is a demo"
#單引号輸出,特殊字元不處理
echo 'I want to say $describe,\t current path: `pwd`'
#雙引号輸出,特殊字元處理
echo "I want to say $describe,\t current path: `pwd`"
執行結果如下:\t處理的結果一樣,都被轉義了,不同的版本預設配置不一樣,我在另一個版本上嘗試是都沒被轉義:
倒引号
鍵盤數字1左邊那個鍵按下的這個符号:`。
上面的示例中已經用到了,在執行pwd指令的時候。是以它的作用是用指令結果代替指令本身,然後用來操作,比如上面的想在字元串擷取pwd的結果進行列印。
和``指令效果一樣的是使用$(),例如想在一個已經由倒引号``包括的指令中,再嵌套執行一個指令,是不允許直接嵌套可以使用$()互相嵌套,如下:
#! /bin/bash
pwd
path=`pwd`
echo "path: $path"
echo "echo path: `echo 'path is '$(pwd)`"
注意最後一行代碼,在字元串中執行echo指令,然後在echo輸出的字元串中執行pwd指令,執行結果如下: