反引號、單引號雙引號、dirname、wildcard
阿新 • • 發佈:2019-01-22
1 反引號、單引號、雙引號的區別
`反引號: `date` 等同於 $(date)
在Linux中反引號起著命令替換的作用;將反引號中的字串做為命令來執行;
如下,shell會執行反引號中的date命令,把結果插入到echo命令顯示的內容中。
> echo The date is `date`
the date is 2015年 11月 25日 星期三 16:18:56 CST
單引號、雙引號shell中有兩種方法作命令替換,除了反引號還可以用$(…)結構括起來,$(…)格式受到POSIX標準支援,也利於巢狀。但反引號內不能再引用反引號,而$()中可以引用反引號。
用於使用者把帶有空格的字串賦值給變數的分界符。
> str="Today is Monday"> echo $strToday is Monday如果沒有單引號或雙引號,shell會把空格後的字串解釋為命令。> str=Today is Mondaybash: is: command not found
單引號和雙引號的區別:單引號告訴shell忽略所有特殊字元,而雙引號忽略大多數,但不包括①美元符號②反引號③反斜槓,這3種特殊字元將不被忽略。 不忽略美元符號意味著shell在雙引號內部可進行變數名替換。> testvalue=100> echo 'The testvalue is $testvalue'The testvalue is $testvalue> echo "The testvalue is $testvalue"The testvalue is 100
舉個例子:
當前執行的指令碼是經過/home/wooya/work/hi3518e/Hi3518_SDK_V1.0.A.0/mpp2/sample/venc/makefile的makefile指令碼兩次呼叫的檔案中的程式碼;但是$(PWD)定位的路徑依然是原makefile所在的路徑(/home/wooya/work/hi3518e/Hi3518_SDK_V1.0.A.0/mpp2/sample/venc/makefile);
`dirname $(PARAM_FILE)`:反引號是將其中的內容作為命令也就是說執行後為:../..
PARAM_FILE:=../../Makefile.param SDK_PATH?=$(shell cd $(PWD)/`dirname $(PARAM_FILE)`/..; pwd) =$(shell cd /home/wooya/work/hi3518e/Hi3518_SDK_V1.0.A.0/mpp2/sample/venc/../../..; pwd) =$(shell cd /home/wooya/work/hi3518e/Hi3518_SDK_V1.0.A.0; pwd) =/home/wooya/work/hi3518e/Hi3518_SDK_V1.0.A.0
dirname命令 :找到上層目錄
`PARAM_FILE:=../../Makefile.param``dirneme ../../Makefile.param` ../..`drname $(PARAM_FILE)`
wildcard命令:
例子:SRC := $(wildcard *.c)
在Makefile規則中,萬用字元會被自動展開。但在變數的定義和函式引用時,萬用字元將失效。這種情況下如果需要萬用字元有效,就需要使用函式“wildcard”,它的用法是:$(wildcard PATTERN...) 。在Makefile中,它被展開為已經存在的、使用空格分開的、匹配此模式的所有檔案列表。