shell的 單雙引號诚欠、反引號與反斜杠
- 單引號:所見即所得
- 雙引號:所見非所得。會先把變量解析之后漾岳,再輸出
- 反引號(``) :命令替換轰绵,通常用于把命令輸出結(jié)果傳給入變量中
- 反斜杠( \ ) :轉(zhuǎn)義字符or逃脫字符,Linux如果echo要讓轉(zhuǎn)義字符發(fā)生作用尼荆,就要使用-e選項左腔,且轉(zhuǎn)義字符要使用雙引號
bash腳本的手冊里面有更完整的介紹
echo (-E)
按照上面介紹的shell規(guī)則,echo使用單引號可以原封不動輸出任何字符
但需要注意捅儒,這時不能輸出內(nèi)部的單引號液样,
eg.
[root@VM-165-116-centos tmp]# echo 'my name is 'bob'\n'
my name is bob\n
而我們的預(yù)期是輸出
my name is 'bob'\n
這說明,echo的內(nèi)容實際上是 'my name is '+bob+'\n'
巧还,也就是echo認(rèn)為的單引號對與我們預(yù)期的單引號對不一致鞭莽,echo是就近原則
如果想用 echo 單引 輸出內(nèi)部的單引號,可以
1. 主動截斷麸祷,把echo的原始內(nèi)容分割成多部分
利用echo就近配對澎怒,我們可以主動截斷來完成單引號的輸出
[root@VM-165-116-centos tmp]# echo 'my name is '"'"'bob'"'"'\n'
my name is 'bob'\n
echo的內(nèi)容實際上是 'my name is '+"'"+'bob'+"'"+'\n'
2. 使用echo -e
-e enable interpretation of backslash escapes
-E disable interpretation of backslash escapes (default)
echo 使用-e option可以對待輸出內(nèi)容進(jìn)行反斜杠轉(zhuǎn)義
于是我們可以使用\x27
替換'
[root@VM-165-116-centos tmp]# echo -e 'my name is \x27bob\x27\n'
my name is 'bob'
[root@VM-165-116-centos tmp]#
單引號的輸出符合預(yù)期,但是末尾\n被backslash escape了阶牍,沒有正常輸出
因此喷面,echo 使用-e option 對于原始內(nèi)容帶有\(zhòng)的部分需要尤其小心是否會被轉(zhuǎn)義
輸出my name is 'bob'\n,需要
[root@VM-165-116-centos tmp]# echo -e 'my name is \x27bob\x27\\n'
my name is 'bob'\n
[root@VM-165-116-centos tmp]#