轉(zhuǎn)自:http://blog.csdn.net/iamlaosong/article/details/54728393
最近要編個(gè)shell腳本處理數(shù)據(jù)品抽,需要檢測(cè)數(shù)據(jù)文件是否存在,文件名中包含日期甜熔,所以需要生成最近幾天的日期圆恤,以便檢測(cè)文件是否存在,看下面的腳本中如何使用雙引號(hào)腔稀、單引號(hào)盆昙、反引號(hào):
-----------------------------------------------------------------------------------------------------
OPDATE=`date-d'-1 day'+%Y%m%d`
? foriin$(seq10)? do?
? FILEDATE=`date-d"-$i day"+%Y%m%d`?
? echo ${FILEDATE}? done
---------------------------------------------------------------------------------------------------------
1、由單引號(hào)括起來的字符都作為普通字符出現(xiàn)焊虏。特殊字符用單引號(hào)括起來以后淡喜,也會(huì)失去原有意義,而只作為普通字符解釋诵闭。如例程中的 '-1 day'炼团,再比如:
$ string=’$PATH’
$ echo $string
$PATH
可見$保持了其本身的含義,作為普通字符出現(xiàn)疏尿。
2瘟芝、由雙引號(hào)括起來的字符,除$(美元符號(hào))褥琐、\(反斜杠)锌俱、’(單引號(hào))、和”(雙引號(hào))這幾個(gè)字符仍是特殊字符并保留其特殊功能外敌呈,其余字符仍作為普通字符對(duì)待嚼鹉。對(duì)于“$”來說,就是用其后指定的變量的值來代替這個(gè)變量和$驱富;對(duì)于“\”而言锚赤,是轉(zhuǎn)義字符,它告訴shell不要對(duì)其后面的那個(gè)字符進(jìn)行特殊處理褐鸥,只當(dāng)作普通字符即可线脚。可以想見,在雙引號(hào)中需要在前面加上“\”的只有四個(gè)字符$浑侥,\姊舵,’和”本身。而對(duì)”號(hào)寓落,若其前面沒有加“\”括丁,則Shell會(huì)將它同前一個(gè)”號(hào)匹配。如例程中的"-$i day"伶选,會(huì)隨著循環(huán)史飞,將$i轉(zhuǎn)換成其代表的值。
3仰税、反引號(hào)(`)這個(gè)字符所對(duì)應(yīng)的鍵一般位于鍵盤的左上角构资,不要將其同單引號(hào)(’)混淆。反引號(hào)括起來的字符串被shell解釋為命令行陨簇,在執(zhí)行時(shí)吐绵,shell首先執(zhí)行該命令行,并以它的標(biāo)準(zhǔn)輸出結(jié)果取代整個(gè)反引號(hào)(包括兩個(gè)反引號(hào))部分河绽。如例程中的`date -d '-1 day' +%Y%m%d`就是把這條命令的結(jié)果賦給變量OPDATE己单。
4、反引號(hào)還可以嵌套使用耙饰。但需注意纹笼,嵌套使用時(shí)內(nèi)層的反引號(hào)必須用反斜杠(\)將其轉(zhuǎn)義。例如:
$ abc=`echo The number of users is \`who| wc -l\``
$ echo $abc
The number of users is 2
$
5榔幸、在反引號(hào)之間的命令行中也可以使用shell的特殊字符。Shell為得到``中命令的結(jié)果矮嫉,它實(shí)際上要去執(zhí)行``中指定的命令削咆。執(zhí)行時(shí),命令中的特殊字符蠢笋,如$拨齐,”,?等又將具有特殊含義昨寞,并且``所包含的可以是任何一個(gè)合法的Shell命令瞻惋,如:
$ ls
note readme.txt Notice Unix.dir
$ TestString="`echo $HOME ` ` ls [nN]*`"
$ echo $TestString
/home/yxz note Notice
最后,說句題外話: 反引號(hào)是一個(gè)老的用法援岩,$()才是新的用法歼狼,如例程中的$(seq 10)。無論是在學(xué)習(xí)中享怀,還是在實(shí)際工作中羽峰,$()都是被推薦的用法。所以上面的的用法可以改成:
$ TestString="$(echo $HOME) $(ls [nN]*)"