bash中有三種引號
- 單引號
兩個單引號包圍起來的字符串就是普通的字符串糟趾,它將保留原始的字面意思
- 雙引號
兩個雙引號包圍起來的字符串,部分特殊字符將起到它們的作用挖函。
這些特殊字符有:美元符论咏,反斜杠,反引號袍嬉,感嘆號境蔼。
- 反引號
兩個反引號包圍起來的字符串,將作為命令來運行伺通,執(zhí)行的輸出結(jié)果作為該反引號的內(nèi)容箍土,稱為命令替換。
它有另一種更好的寫法:$(command)
- 美元符
$
在單罐监、雙引號中的表現(xiàn): 在雙引號中的$
吴藻,將發(fā)生變量引用, 而在單引號中的$
, 將保留它的字面意思 - 反斜杠在單、雙引號中的表現(xiàn): 在雙引號中的反引號弓柱,將轉(zhuǎn)義它后面的字符沟堡,使其具有特殊意義或者失去原來的特殊意義,在單引號中的反斜杠矢空,將保留它的字面意思
- 反引號與其他兩種引號的不同: 反引號包圍起來的字符串將被運行弦叶,取其結(jié)果
常見的問題
- 把反引號寫成單引號
- 總是忘了加雙引號
seq 3
1
2
3
echo `seq 3`
1 2 3
echo "`seq 3`"
1
2
3
seq輸出的是包含換行的信息,但第二條命令卻丟失了換行符妇多,因為bash在解析時認(rèn)為反引號的輸出結(jié)果是3個獨立的字符伤哺,解析后與
echo 1 2 3
相同(這個過程,bash做了很多工作者祖,有興趣的可以了解下bash解析順序); 而第三條命令立莉,bash把反引號的輸出結(jié)果當(dāng)成一個整體對待(因為它被雙引號包圍),所以輸出的結(jié)果不會被bash拆分對待,換行符得以保留七问。所以蜓耻,當(dāng)你需要保留變量或者命令替換的 完整信息, 特別是換行符時,請記得給它們戴上雙引號作保險械巡,時刻加個雙引號是個好習(xí)慣(為什么不是單引號呢刹淌?前面解釋了,單引號里面沒有魔法讥耗,變量也變不了了有勾,命令替換也替換不了了)。
- 引號嵌套總是混亂的
雙引號中加入其他引號很容易古程,你只需要用反斜杠\
轉(zhuǎn)義你要添加的引號蔼卡。
單引號中加入單引號:
echo $'abc\'abc'
echo -e 'abc\x27abc'
echo 'abc'\''abc'
第一種方法是bash特有的,$'string' 之間到反斜杠都將轉(zhuǎn)義字符挣磨,第二種方法雇逞,通過單引號的ASCII碼來打印單引號荤懂,而第三種方法,則是通過截斷命令塘砸,在中間插入單引號來實現(xiàn)节仿。一般用第一種方法是最優(yōu)雅的。