案例,如果我想輸出一個(gè)星號(hào)(),使用 echo 如何做?
echo
這是肯定不行的,需要將轉(zhuǎn)移,即:echo *
這樣就引出了引用的概念.所為引用,是用來防止 shell 將某些你想要的東西解釋成不同的意義.如果你希望某些可能被 shell 視為個(gè)別參數(shù)的東西保持為單個(gè)參數(shù),這時(shí)你就必須將其引用.
引用的三種方式:
反斜杠轉(zhuǎn)義
字符前置反斜杠(),用來告知 shell 該字符即為其字面上的意義.
單引號(hào)
單引號(hào)(‘...’)強(qiáng)制 shell 將一對(duì)引號(hào)之間的所有字符都看做其字面上的意義.shell 腳本會(huì)刪除這兩個(gè)引號(hào),只單獨(dú)留下被括起來的完整文字內(nèi)容:
命令:```echo 'here are some character ? $ \'``` 輸出:```here are some character * ?
$ ```
不能再一個(gè)單引號(hào)引用的字符串里再內(nèi)嵌一個(gè)單引號(hào).即使是反斜杠,在單引號(hào)里也沒有特殊意義(某些系統(tǒng)里,像 echo ‘A\tB’這樣的命令看起來像是 shell 特別的處理反斜杠,其實(shí)不然,這是 echo 命令本身有特殊的處理方式)
如需混用單引號(hào)和雙引號(hào),可以小心的使用反斜杠轉(zhuǎn)義以及不同引用字符串的連接來做到:
命令:echo 'he said "how'\''s tricks?"'
輸出:he said "how's tricks?"
命令”echo "she replied ,\"movin' along\""
輸出:she replied ,"movin' along"
不管怎么處理,這種結(jié)合方式永遠(yuǎn)是很難閱讀的.
雙引號(hào)
雙引號(hào)(“...”)就像單引號(hào)那樣,將括起來的文字視為單一字符串.只不過,雙引號(hào)會(huì)確切的處理括起來文字中的轉(zhuǎn)義字符和變量,算術(shù),命令替換:
x=hahaha
echo “$x”
輸出:hahaha
在雙引號(hào)里,字符$,”,`與\,如需用到字面上的意義,都必須前置.任何其他字符前面的反斜杠是不帶特殊意義的.序列-newline 會(huì)完全的被刪除,就好像是用在腳本里的正文中一樣.
單引號(hào)被括在雙引號(hào)里時(shí)就無特殊意義了,他們不必承兌,也不許轉(zhuǎn)移.
命令:echo "hahah'"
輸出:hahah'
一般來說,使用單引號(hào)的時(shí)機(jī)是希望完全不處理的地方.否則,當(dāng)希望將多個(gè)單詞視為單一字符串,但又需要 shell 為你做些事情,此時(shí)使用雙引號(hào),例如將一個(gè)變量值與另一個(gè)變量值連在一起:
oldvar=”$oldvar $newvar”