目前在准备龙芯项目的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中的一个问题 ${}带正则匹配的表达式相关推荐

  1. linux if else 格式,linux shell中 if else以及大于、小于、等于逻辑表达式

    在linux shell编程中,大多数情况下,可以使用测试命令来对条件进行测试,这里简单的介绍下,方便需要的朋友 比如比较字符串.判断文件是否存在及是否可读等,通常用"[]"来表示 ...

  2. Linux shell 中的数组和关联数组

    写在前面的话 我用开始废柴了,这个又是写给我自己看的了. 普通数组 1.数组的定义 在Linux shell中定义一个普通的数组很简单,首先我们先给数组命名(当然要符合所有的命名规则咯).定义数组的一 ...

  3. linux sed 正则提取字符串,Shell中使用grep、sed正则提取和替换字符串

    Linux中使用grep正则提取字符串 echo office365 | grep -P '\d+' -o find . -name "*.txt" | xargs grep -P ...

  4. Day25 linux shell中的特殊符号与命令

    2019独角兽企业重金招聘Python工程师标准>>> linux shell中的特殊符号 *:代表零个或多个任意字符 ?:只代表一个任意字符,不管是数字还是字母,只要是一个字符,都 ...

  5. linux shell $0怎么输出,linux shell中$0,$?,$!等的特殊用法

    一.Shell脚本中$0.$?.$!.$$.$*.$#.$@等的意义说明 (1)$$ Shell本身的PID(ProcessID,即脚本运行的当前进程ID号) (2)$! Shell最后运行的后台Pr ...

  6. linux的shell的功能,linux shell中${ }的一些特异功能

    linux shell中${ }的一些特异功能,这部分内容是shell中的比较经典的部分之一,建议认真学习,深刻体会. 假设我们定义一个变量为: file=/dir1/dir2/dir3/my.fil ...

  7. linux shell中./a.sh , sh a.sh , source a.sh, . ./a.sh的区别

    在linux shell中, 执行shell script的方式有多种, 有什么区别呢? 现在用一个简单例子再来说下. a.sh的内容是: #! /bin/bash echo hello world ...

  8. linux shell数学计算器,技术|使用 GNU bc 在 Linux Shell 中进行数学运算

    在 shell 中使用 bc 更好地做算数,它是一种用于高级计算的数学语言. 大多数 POSIX 系统带有 GNU bc,这是一种任意精度的数字处理语言.它的语法类似于 C,但是它也支持交互式执行语句 ...

  9. linux shell中的命令自动补全(compgen complete)与 命令行参数解析

    linux shell中的命令自动补全(compgen complete)与 命令行参数解析 标签: shell脚本 2013-12-31 21:56 6661人阅读 评论(6) 收藏 举报 分类: ...

最新文章

  1. POJ 1182 食物链
  2. java B2B2C Springcloud电子商城系统-通过消息队列传输zipkin日志
  3. python提取pdf表格数据导出到mongodb_python读取mongoDB数据并存入本地excel表格
  4. MyEclipse 10 之下Web Service 的创建和实现
  5. 2019年最值得关注的五大微服务发展趋势
  6. 我们公司使用了 6 年的Spring Boot 项目部署方案!打包 + Shell 脚本部署详解,稳的一批!...
  7. centos7抢先安装docker1.0
  8. win7 配置jdk
  9. mvc实例详解java_MVC模式在Java Web应用程序中的实例分析
  10. 分期手续费转换为年化利率
  11. ss命令在linux上的安装
  12. Spring Boot-入门
  13. 戴尔台式计算机usb驱动,dell服务器和电脑不支持usb2.0设备安装系统的解决方案方法...
  14. 程序员到底有没有必要买一台阿里云服务器?
  15. 互联网赚钱的逻辑是什么?
  16. 富士胶片3月底完成日立影像诊断业务收购;中国癌症早筛第一股诺辉健康登陆港交所 | 美通企业日报...
  17. 什么副业能让你的收入增长十倍?
  18. 计算机从应用上看向那个方向发展,(总)2019年6月一级Ms Office试题
  19. Julia:报错 no method matching increment_deriv!(::Float64, ::Float64)
  20. java 视频流 读取_Java之视频读取IO流解帧实施方案

热门文章

  1. pringMVC“Ambiguous mapping found. Cannot map 'XXXController' bean method”解决方法
  2. 奔五的人学ios:swift竟然没有字符串包括,找个简单的解决方法
  3. 查询进程打开的文件(转)
  4. fir.im Weekly - 1000 个 Android 开源项目集合
  5. PHP vs Node.js vs Nginx-Lua(转)
  6. 模态对话框阻塞主线程的话不影响其他线程操作主线程控件(不阻塞)
  7. c#中获取控件窗体句柄,获取窗体等的一些操作
  8. MFC动态按钮的创建及其消息响应 和 自定义消息
  9. C语言中“指针”和“指针变量”的区别是什么
  10. opencvsharp打开相机并视频显示