makefile与shell语法易混点

1.Shell变量和Makefile变量名一样,但是含义不一样:

Makefile以下变量含义:

$@ :扩展为当前规则的目标文件名;

$< :扩展为当前规则依赖文件列表中的第一个依赖文件;

$? :扩展为所有的修改日期比当前规则的目标文件的创建日期更晚的依赖文件,该值只有 在使用显式规则时才会被使用;

$*: 扩展成当前规则中目标文件和依赖文件共享的文件名,不含扩展名;

$^ :扩展为整个依赖文件的列表 (除掉了所有重复的文件名)。

shell脚步以下变量含义:

$$ Shell本身的PID(ProcessID) 
$! Shell最后运行的后台Process的PID 
$? 最后运行的命令的结束代码(返回值) 
$- 使用Set命令设定的Flag一览 
$* 所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。 
$@ 所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。 
$# 添加到Shell的参数个数 ($0不算一个参数)
$0 Shell本身的文件名 
$1~$n 添加到Shell的各参数值。$1是第1参数、$2是第2参数…。 

2.shell命令

1)sed -e表示将下一个字符串解析为sed编辑命令,如果只传递一个编辑命令给sed,-e选项可以省略

2)tr命令可以对来自标准输入的字符进行替换、压缩和删除。它可以将一组字符变成另一组字符

[:alnum:]:字母和数字

[:alpha:]:字母

[:cntrl:]:控制(非打印)字符

[:digit:]:数字

[:graph:]:图形字符

[:lower:]:小写字母

[:print:]:可打印字符

[:punct:]:标点符号

[:space:]:空白字符

[:upper:]:大写字母

[:xdigit:]:十六进制字符

eg:$(shell uname -s | tr '[:upper:]' '[:lower:]' |  sed -e 's/\(cygwin\).*/cygwin/')

表示将输入的大写字符替换成小写字符。

3)egrep -i "^[[:space:]]*${2}[[:space:]]" boards.cfg` -i表示查找字符串,忽略大小写

4)set ${line}将line的变量值覆盖原先脚步的命令行参数,成为新的命令行参数

5)${1%_config}意思是将$1的字符串右边拿掉"_config"(如果有的话)

6)$(@:_config=)表示将$@变量中的_config替换为空

猜你喜欢

转载自blog.csdn.net/u012681014/article/details/70179685