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中,它被展开为已经存在的、使用空格分开的、匹配此模式的所有文件列表。