在某个makefile文件中通过include引入某个文件进来
Include $(shell ./getname)
而getname中的内容即为:
pwd=$(pwd);
if [ "${pwd#*/zloader.}" = "$pwd" ];then
echo Makefile.cpci
else
echo Makefile.${pwd#*/zloader.}
fi
一直没看懂${pwd#*/zloader.} 这个代表什么意思,后来才知道其实得到的是Make file文件的后缀名。
如果是pwd= /xxx/yyy/zloader.bios,那么需要得到的是Makefile.bios,其中 ${pwd#*/zloader.} = bios。其中${aaa#bbb}是一个正则表达式,而'*/ '表示pwd中路径字串中zloader前面的全部部分。
解释:
${parameter#pattern}
Substitute the value of parameter with patternremoved from the left side. The smallest portion of the contents of parametermatching pattern is removed. Shell filename substitution characters (*, ?,[...], !, and @) may be used in pattern.
在Linux下尝试一下脚本,即可证明。
#!/bin/sh
mkdir -p zloader./xxdir
cd zloader./xxdir
pwd=$(pwd)
echo "pwd = $pwd"
echo "this will substitue pwd about the patternzloader. , into NULL"
echo "${pwd#*/zloader.}"
cd ../..