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