bash中的三種引號

bash中有三種引號

  • 單引號

兩個單引號包圍起來的字符串就是普通的字符串,它將保留原始的字面意思

  • 雙引號

兩個雙引號包圍起來的字符串,部分特殊字符將起到它們的作用。
這些特殊字符有:美元符,反斜杠,反引號,感嘆號。

  • 反引號

兩個反引號包圍起來的字符串,將作為命令來運行,執(zhí)行的輸出結(jié)果作為該反引號的內(nèi)容,稱為命令替換。
它有另一種更好的寫法:$(command)

  1. 美元符$在單、雙引號中的表現(xiàn): 在雙引號中的$,將發(fā)生變量引用, 而在單引號中的$, 將保留它的字面意思
  2. 反斜杠在單、雙引號中的表現(xiàn): 在雙引號中的反引號,將轉(zhuǎn)義它后面的字符,使其具有特殊意義或者失去原來的特殊意義,在單引號中的反斜杠,將保留它的字面意思
  3. 反引號與其他兩種引號的不同: 反引號包圍起來的字符串將被運行,取其結(jié)果

常見的問題

  • 把反引號寫成單引號
  • 總是忘了加雙引號
seq 3
1
2
3

echo `seq 3`
1 2 3

echo "`seq 3`"
1
2
3

seq輸出的是包含換行的信息,但第二條命令卻丟失了換行符,因為bash在解析時認為反引號的輸出結(jié)果是3個獨立的字符,解析后與echo 1 2 3相同(這個過程,bash做了很多工作,有興趣的可以了解下bash解析順序); 而第三條命令,bash把反引號的輸出結(jié)果當成一個整體對待(因為它被雙引號包圍),所以輸出的結(jié)果不會被bash拆分對待,換行符得以保留。所以,當你需要保留變量或者命令替換的 完整信息, 特別是換行符時,請記得給它們戴上雙引號作保險,時刻加個雙引號是個好習慣(為什么不是單引號呢?前面解釋了,單引號里面沒有魔法,變量也變不了了,命令替換也替換不了了)。

  • 引號嵌套總是混亂的

雙引號中加入其他引號很容易,你只需要用反斜杠\轉(zhuǎn)義你要添加的引號。
單引號中加入單引號:

echo $'abc\'abc'
echo -e 'abc\x27abc'
echo 'abc'\''abc'

第一種方法是bash特有的,$'string' 之間到反斜杠都將轉(zhuǎn)義字符,第二種方法,通過單引號的ASCII碼來打印單引號,而第三種方法,則是通過截斷命令,在中間插入單引號來實現(xiàn)。一般用第一種方法是最優(yōu)雅的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容