Unix Shell中單引號、雙引號字符、反斜杠、反引號的使用[轉]


在執行shell腳本的時候,shell將會對腳本中的行進行解釋,然后執行;
對於一些特殊處理的句子,我們可以使用引號或者反斜線來避免shell解釋執行之。
如下,當在命令行中輸入:
echo *
child.sh env_variable father.sh param.sh profile.sh 125017.sh
默認會將當前文件夾下的所有文件都打印出來,但我們需要的是輸出一個“*”。
可以以這樣的方式讓shell不去解釋星號(*):
echo "*"
*

下面是shell引用類型
------------------------------
"" 雙引號
'' 單引號
` 反引號
\ 反斜線
------------------------------
1.雙引號
使用雙引號,可引用除了字符$、`、\外的任意字符或字符串。
例如:
STR="MX2 is better than MI2"
echo "$STR"
MX2 is better than MI2
也可以去掉雙引號:
echo $STR
MX2 is better than MI2

雙引號可以使具有特殊含義的詞失去其原本的意義,如下:
cal
December 2012
Sun Mon Tue Wed Thu Fri Sat
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

但是,當我們將cal命令賦給一個變量,如下:
CALENDAR="cal"
echo $CALENDAR
cal
這里,雙引號是cal命令失去了原有的顯示日歷的功能;這里雙引號類似於轉義字符。

比如DB2中,我們要將這樣的字符串('1','2')添加到表的一個字段中,那么我們將怎么寫呢?
db2 => select '1','2' from sysibm.sysdummy1
1 2
- -
1 2
從這里看到,db2將'1','2'認為是2個字符串,這是因為單引號在數據庫中有着特殊的含義。
我們要將其轉義,然后才可以添加到表中,這個起着轉義字符呢就是單引號('),如下:
db2 => select ''1','2'' from sysibm.sysdummy1
SQL0104N 在 "select ''" 后面找到異常標記
"1','2''"。預期標記可能包括:"<space>"。 SQLSTATE=42601
這里除了第一個單引號和最后一個單引號對應之外,其余的都未進行轉義,所以報錯,
下面是正確的寫法:
db2 => select '''1'',''2''' from sysibm.sysdummy1
1
-------
'1','2'

在DB2 400上也是同樣的寫法:
select '''1'',''2''' from qsys2/qsqptabl
....+....1....
Constant value
'1','2'
******** End of data ********

如果在字符才中有雙引號的話,可以使用反斜杠"\"來進行轉義,如下:
STR="\"LENOVO"
echo "my PC is made by $STR"
my PC is made by "LENOVO
如果將$符號轉義了,那么STR變量將失去意義:
echo "my PC is made by \$STR"
my PC is made by $STR

2.單引號
單引號與雙引號類似,不同的是shell會忽略任何引用值,即屏蔽的單引號內的特殊字符的原本含義。
如:echo ‘my name is $LOGNAME’其結果為:my name is $LOGNAME

3.單引號和雙引號的區別
單引號‘’:取消除單引號以外的任何字符的特殊含義。
如:echo ‘my name is $name’其結果為:my name is $name,此時$只作為一個普通字符使用了。
雙引號“”:取消除雙引號、$號以及_號以外的所有字符的特殊含義
單引號是強引用,引號里的值是什么,變量的值就是什么;
雙引號是弱引用,引號里的值若再包含變量,那在賦值的時候,所有這些變量就被立即替換了。
例如:
echo "who am i:$LOGNAME" 結果:who am i:yeexun
echo "who am i:'$LOGNAME'" 結果:who am i:'yeexun'
echo "who am i:"$LOGNAME"" 結果:who am i:yeexun

echo 'who am i:$LOGNAME' 結果:who am i:$LOGNAME
echo 'who am i:"$LOGNAME"' 結果:who am i:"$LOGNAME"
echo 'who am i:'$LOGNAME'' 結果:who am i:yeexun

4.反引號
反引號(`)用於設置系統命令輸出到變量,shell認為反引號中的內容是一個系統命令,
所以將會執行之:
echo `date`
Mon Dec 24 16:06:55 CST 2012
這和直接輸入date命令是一樣的:
date
Mon Dec 24 16:07:12 CST 2012
若輸入一個非系統命令,則shell不認識此命令,將會報錯:
echo `DATE`
ksh: DATE: not found
關於date命令,參照:http://blog.csdn.net/bobo12082119/article/details/8426831

5.反斜杠
反斜杠起的作用是將一些特殊字符按原樣輸出,這些特殊字符有:$、*、`、+、^、&、|、"、?。
例如:echo *
將當前目錄下的文件名和目錄名都列出來。
echo \*
*
而使用反斜杠轉義之后,就輸出了星號。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM