1. 程式人生 > >反引號、單引號雙引號、dirname、wildcard

反引號、單引號雙引號、dirname、wildcard

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 $str
Today is Monday
如果沒有單引號或雙引號,shell會把空格後的字串解釋為命令。
> str=Today is Monday
bash: 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`
`drname $(PARAM_FILE)`
`dirneme ../../Makefile.param` ../..

wildcard命令:

例子:SRC  := $(wildcard *.c) 

在Makefile規則中,萬用字元會被自動展開。但在變數的定義和函式引用時,萬用字元將失效。這種情況下如果需要萬用字元有效,就需要使用函式“wildcard”,它的用法是:$(wildcard PATTERN...) 。在Makefile中,它被展開為已經存在的、使用空格分開的、匹配此模式的所有檔案列表。