天天看點

bash shell基本文法之單引号、雙引号和倒引号的差別及使用前言單引号與雙引号倒引号

前言

在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`"
           

執行結果:

bash shell基本文法之單引号、雙引号和倒引号的差別及使用前言單引号與雙引号倒引号

總之,單引号會把其中的一些特殊字元串作為普通字元對待,雙引号解釋這些特殊字元,如變量替換

p.s. : 對于反斜線的處理,在使用echo指令的時,反斜線或者說這些轉義字元怎麼處理,是由echo指令決定的,而不是單/雙引号。也就是說,echo指令預設配置,對于反斜線,單/雙引号處理結果一樣,因為和echo配置有關。

下面是使用man指令檢視echo的文檔的一部分:

bash shell基本文法之單引号、雙引号和倒引号的差別及使用前言單引号與雙引号倒引号

對于使用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處理的結果一樣,都被轉義了,不同的版本預設配置不一樣,我在另一個版本上嘗試是都沒被轉義:

bash shell基本文法之單引号、雙引号和倒引号的差別及使用前言單引号與雙引号倒引号

倒引号

鍵盤數字1左邊那個鍵按下的這個符号:`。

上面的示例中已經用到了,在執行pwd指令的時候。是以它的作用是用指令結果代替指令本身,然後用來操作,比如上面的想在字元串擷取pwd的結果進行列印。

和``指令效果一樣的是使用$(),例如想在一個已經由倒引号``包括的指令中,再嵌套執行一個指令,是不允許直接嵌套可以使用$()互相嵌套,如下:

#! /bin/bash
pwd
path=`pwd`
echo "path: $path"
echo "echo path: `echo 'path is '$(pwd)`"
           

注意最後一行代碼,在字元串中執行echo指令,然後在echo輸出的字元串中執行pwd指令,執行結果如下:

bash shell基本文法之單引号、雙引号和倒引号的差別及使用前言單引号與雙引号倒引号

繼續閱讀