Linux shell中的一个问题 ${}带正则匹配的表达式
目前在准备龙芯项目的PMON,在研究其编译过程的时候,看到一些make 语句,百思不得其解。后来在shell编程中看到一点资料,牵扯到Shell中的正则表达式。故记录下来,以备后来查阅。
问题:
在某个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 ../..
具体的说明和理论请查看以下转载文章的章节 :${}带正则匹配的表达式
以下是转载文章
----------------------------------------------------------------------------Linux Shell中的参数替换----------------------------------------------------------------------------
Bash中的$符号的作用是参数替换,将参数名替换为参数所代表的值。对于$来说,大括号是可选的,即$A和${A}代表同一个参数。
${}带冒号的有下面几种表达式:
${parameter:-word}
如果parameter为null或者未设置,整个参数替换表达式值为word
${parameter:=word}
如果parameter为null或者未设置,整个参数替换表达式值为word,并且parameter参数值设置为word
${parameter:?word}
如果parameter为null或者未设置,则打印出错误信息。否则,整个参数替换表达式值为$parameter
${parameter:+word}
如果parameter不为null或者未设置,则整个参数替换表达式值为word
${parameter:offset}
${parameter:offset:length}
parameter的值的子字符串。
可以理解下下面这几个例子:

${}带!有下面几种表达式:
${!prefix*}
${!prefix@}
将带有前缀为prefix的参数名打印出来
${!name[@]}
${!name[*]}
这个是针对name数组的,打印出来name数组有哪些下标
可以理解下下面这几个例子:

${}带正则匹配的几种表达式:
${parameter#word}
${parameter##word}
从头开始扫描word,将匹配word正则表达的字符过滤掉
#为最短匹配,##为最长匹配
${parameter%word}
${parameter%%word}
从尾开始扫描word,将匹配word正则表达式的字符过滤掉
%为最短匹配,%%为最长匹配
可以理解下面这几个例子:

${parameter/pattern/string}
${parameter//pattern/string}
将parameter对应值的pattern字符串替换成为string字符串
/表示只替换一次
//表示全部替换
可以理解下面这几个例子:

转载部分出处: http://www.07net01.com/linux/Linux_Shellcanshutihuan_347699_1370251380.html
Linux shell中的一个问题 ${}带正则匹配的表达式的更多相关文章
- 理解 Linux shell 中的一个方言:2>&1
理解 Linux shell 中的一个方言:2>&1 2016-11-14 杜亦舒 前言 在使用 linux 命令或者 shell 编程时,这个用法常会遇到 2>&1 如 ...
- linux Shell中常用的条件判断
linux Shell中常用的条件判断 -b file 若文件存在且是一个块特殊文件,则为真 -c file 若文件存在且是一个字符特殊文件,则为真 -d ...
- Linux shell中的竖线(|)——…
原文地址:Linux shell中的竖线(|)--管道符号作者:潇潇 管道符号,是unix一个很强大的功能,符号为一条竖线:"|". 用法: command 1 | command ...
- [转载]Linux shell中的竖线(|)——管道符号
原文地址:Linux shell中的竖线(|)--管道符号作者:潇潇 管道符号,是unix一个很强大的功能,符号为一条竖线:"|". 用法: command 1 | command ...
- Linux Shell中有三种引号的用法
Linux Shell中有三种引号,分别为双引号(" ").单引号(' ')以及反引号(` `). 其中双引号对字符串中出现的$.''.`和\进行替换:单引号不进行替换,将字符串中 ...
- Linux Shell中的特殊符号和含义简明总结(包含了绝大部份)
case语句适用于需要进行多重分支的应用情况. case分支语句的格式如下: case $变量名 in 模式1) 命令序列1 ;; 模式2) 命令序列2 ;; *) 默认执行的命令序列 ...
- [转]Linux shell中的那些小把戏
我日常使用Linux shell(Bash),但是我经常忘记一些有用的命令或者shell技巧.是的,我能记住一些命令,但是肯定不会只在特定的任务上使用一次,所以我就开始在我的Dropbox账号里用文本 ...
- [转帖]Linux shell中2>&1的含义解释 (全网最全,看完就懂)
Linux shell中2>&1的含义解释 (全网最全,看完就懂) https://blog.csdn.net/zhaominpro/article/details/82630528 ...
- linux shell 中的sleep命令
开始还以为是这样的语法: sleep(1), 后面发现是: linux shell 中的sleep命令 分类: LINUX 在有的shell(比如linux中的bash)中sleep还支持睡眠(分,小 ...
随机推荐
- Java动态 遍历List 时删除List特征元素 异常问题 及解决方案总结
首先.这是一个极其简单的问题,大牛可忽略.新手可能会遇到,Java中遍历某个List 时删除该List元素 会抛出异常. 这一个简单的问题再高手严重不值一提,但新手可能会比較困惑,用哪种方式能够安全有 ...
- [Protractor] Running tests on multiple browsers
Testing your AngularJS application on multiple browsers is important, and Protractor offers this abi ...
- [跟我学spring学习笔记][IoC]
IoC基础 什么是IoC Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想. ioc做什么 IoC容器帮对象找相应的依赖对象并注入,而不是由对象主动去找 ...
- HTTP协议5之代理--转
代理服务器 Web代理(proxy)服务器是网络的中间实体. 代理位于Web客户端和Web服务器之间,扮演“中间人”的角色. HTTP的代理服务器即是Web服务器又是Web客户端. Fiddler就是 ...
- html5 音频
目前,web页面上没有标准的方式来播放音频文件,大多数的音频文件是使用插件来播放,而众多的浏览器使用了不同的插件.而html5的到来,给我们提供了一个标准的方式来播放web中音频文件,用户不再为浏览器 ...
- 2016 ACM/ICPC Asia Regional Shenyang Online
I:QSC and Master 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5900 题意: 给出n对数keyi,vali表示当前这对数的键值和权值 ...
- PHP学习笔记二十七【重写】
<?php // class Animal{ public $name; protected $price; function cry(){ echo "动物在叫....<br/ ...
- (转) Pointers
原地址 http://www.cplusplus.com/doc/tutorial/pointers/ Pointers In earlier chapters, variables have bee ...
- Python中的Copy和Deepcopy
一,Python的对象: Python存在大量的对象,我们一般提到的对象都是C中的结构体在堆中申请的一块内存(以CPython为例),每一个对象都有ID,可以通过ID(Object)获得.对象的范围包 ...
- HibernateTemplate用法
private HibernateTemplate hibernateTemplate; 使用HbernateTemplate HibernateTemplate提供持久层访问模板化,使用Hibern ...