Shell中的 $()、${}、$[]、$(())

$()、${} 替换

类型 功能 区别
${} 对变量的替换,同$var ${}会比较精确的界定变量名称的范围
$() 对命令的替换,同`` $()并不是所有shell都支持,可以嵌套使用
``基本上可用在全部的 unix shell 中使用,不可以嵌套使用

命令替换与变量替换差不多,都是用来重组命令行的,先完成引号里的命令行,然后将其结果替换出来,再重组成新的命令行。

${} 变量内容的替换、删除、取代

先定义一个变量path,值为PATH的值

[ranan@hadoop102 ~]$ path=${PATH}
[ranan@hadoop102 ~]$ echo $path
/home/ranan/.local/bin:/home/ranan/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/module/jdk1.8.0_212/bin:/opt/module/hadoop-3.1.3/bin:/sbin

path = /home/ranan/.local/bin:/home/ranan/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/module/jdk1.8.0_212/bin:/opt/module/hadoop-3.1.3/bin:/sbin

并没有对原数据进行操作,原数据还是没有改变

${变量#关键字} 删除从左到右第一个符合的最短数据,最短匹配

${变量##关键字} 删除从左到右第一个符合的最长数据,最长匹配

删除第一个路径/home/ranan/.local/bin
[ranan@hadoop102 ~]$ echo ${path#*:}
/home/ranan/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/module/jdk1.8.0_212/bin:/opt/module/hadoop-3.1.3/bin:/sbin 删除最后一个:之前的数据
[ranan@hadoop102 ~]$ echo ${path##*:}
/sbin

${变量%关键字} 删除从右到左第一个符合的最短数据,最短匹配

${变量%%关键字} 删除从右到左第一个符合的最长数据,最长匹配

删除最后一个路径,最后一个:开始的任何内容,所以是:*
[ranan@hadoop102 ~]$ echo ${path%:*}
/home/ranan/.local/bin:/home/ranan/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/module/jdk1.8.0_212/bin:/opt/module/hadoop-3.1.3/bin 保留第一个路径
[ranan@hadoop102 ~]$ echo ${path%%:*}
/home/ranan/.local/bin

${变量/旧字符串} 第一个旧字符串会被新字符串替换

${变量//新字符串} 全部的旧字符串会被新字符串替换

替换第一个ranan为RANAN
[ranan@hadoop102 ~]$ echo ${path/ranan/RANAN}
/home/RANAN/.local/bin:/home/ranan/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/module/jdk1.8.0_212/bin:/opt/module/hadoop-3.1.3/bin:/sbin 替换所有的ranan为RANAN
[ranan@hadoop102 ~]$ echo ${path//ranan/RANAN}
/home/RANAN/.local/bin:/home/RANAN/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/module/jdk1.8.0_212/bin:/opt/module/hadoop-3.1.3/bin:/sbin

其他用法

${变量:数字1:数字2} 从第一个数字起提取数字2个字节。

${#变量} 获取变量长度

数组

A="a b c def"   # 定义字符串
A=(a b c def) # 定义字符数组
命令 解释 结果 补充
${A[@]} 返回数组全部元素 a b c def $@ 代表命令行中所有的参数,不过把每个参数区分对待,可循环获取
${A[*]} 同上 a b c def $* 代表命令行中所有的参数,把所有参数看成一个整体
${A[0]} 返回数组第一个元素 a
${#A[@]} 返回数组元素总个数 4 $#获取所有输入参数个数,常用于循环
${#A[*]} 同上 4
${#A[3]} 返回A[3]元素的长度,即def的长度 3
A[3]=xzy 则是将第四个组数重新定义为 xyz

$[]、$(()) 运算符

在 $(( ))或$[] 中的变量名称,可加$也可以不加。

$((运算式)) 或 $[运算式]

$(( ))可以将其他进制转成十进制数显示出来echo $((N#xx))

[ranan@hadoop102 ~]$ echo $[(2+3)*4]
20
[ranan@hadoop102 ~]$ echo $((2#110))
6

Shell $()、${}、$[]、$(())的更多相关文章

  1. 10、Cocos2dx 3.0游戏开发找小三之容器篇:Vector、Map、Value

    重开发人员的劳动成果.转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27705613 容器 3.0版本号之前Cocos2d- ...

  2. GPRS的工作原理、主要特点

    源:http://blog.csdn.net/sdudubing/article/details/7682467 GPRS的工作原理.主要特点: 引 言 近年来,通信技术和网络技术的迅速发展,特别是无 ...

  3. ES6学习笔记<五> Module的操作——import、export、as

    import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小 ...

  4. ArcGIS Enterprise 10.5.1 静默安装部署记录(Centos 7.2 minimal)- 6、总结

    安装小结 安装完成后,首先我们需要将Datastore托管给Server,再将Server托管给Portal以此来完成整个单机版Enterprise 部署流程.为了测试流程是否正确,我们可以采用上传一 ...

  5. 19、Cocos2dx 3.0游戏开发找小三之Action:流动的水没有形状,漂流的风找不到踪迹、、、

    重开发人员的劳动成果.转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/30478985 流动的水没有形状.漂流的风找不到踪迹. ...

  6. POJ 3159 Candies、

    题意:n个小孩,m个比较(给你两个孩子代号a,b.然后c意味着a比b最多只能少c个糖果),问1和n之间差距最大的糖果数量. 思路:这是一个差分约束思路 不懂得:传送门, 转化一下就是一个SPFA求最短 ...

  7. Educational Codeforces Round 10 A B题、

    A. Gabriel and Caterpillar 题意: 就是说  一个小孩子去观察毛毛虫从 h1的地方爬到h2的地方.毛毛虫从10点爬到22点.每小时爬的距离是a, 晚上22点到第二天早上10点 ...

  8. 最小生成树prim、

    过年那几天确实没好好学习.在老家闲着也是闲着.可是就是没看书. 回来这几天又一直在弄个人博客.买域名云服务器备案什么的- -. 麻烦死了呢. 在腾讯花1块钱备案了一个网站www.goodgoodstu ...

  9. Linux-shell-算术运算{expr、bc、dc、(( ))和[ ]}

    Linux-shell-算术运算{expr.bc.dc.(( ))和[ ]} 摘自: https://www.cnblogs.com/snowsolf/p/3325235.html 在Linux下做算 ...

  10. CocoaPods的安装、使用、以及遇到的问题

    CocoaPods是什么? 当你开发iOS应用时,会经常使用到很多第三方开源类库,比如JSONKit,AFNetWorking等等.可能某个类库又用到其他类库,所以要使用它,必须得另外下载其他类库,而 ...

随机推荐

  1. binary-tree-postorder-traversal leetcode C++

    Given a binary tree, return the postorder traversal of its nodes' values. For example: Given binary ...

  2. 从ACID到CAP及BASE

    从ACID到CAP及BASE ACID 说到事务,肯定想到事务的ACID特性,即原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durabilit ...

  3. centos7 永久修改hostname

    1.修改 /etc/sysconfig/network ,重启后还是原来的主机名 2.百度有说明是/etc/rc.d/rc.sysinit下的脚本还原了还来主机名,问题是的我主机上没有这个脚本 3.执 ...

  4. prometheus(4)之alertmanager报警插件

    报警处理流程如下: 1. Prometheus Server监控目标主机上暴露的http接口(这里假设接口A),通过Promethes配置的'scrape_interval'定义的时间间隔,定期采集目 ...

  5. ELK集群之logstash(5)

    Logstash工作原理   Logstash事件处理有三个阶段:inputs → filters → outputs.是一个接收,处理,转发日志的工具.支持系统日志,webserver日志,错误日志 ...

  6. C++ 变量声明 定义 作用域 链接性总结

    变量定义 变量的定义用于为变量分配存储空间,还可以为变量指定初始值.在一个程序中,变量有且仅有一个定义. 变量声明 用于向程序表明变量的类型和名字.程序中变量可以声明多次,但只能定义一次. 变量的类型 ...

  7. 了解php数据库常用语法增删改查

    数据库基本语法 MySQL增:insert into 表名 (字段1,...,字段n) values (值1,...,值n) MySQL删:delete from 表名 where 条件 MySQL改 ...

  8. mui轮播图为什么设置了自动播放参数也不能自动播放呢?

    最近在做项目的时候,发现Mui的轮播图遇到个问题,设置了自动播放但是怎么也不能自动播放,这是为什么呢? 原来如果动态给mui的图片轮播添加图片,又使用的ajax获取的数据,但是你ajax 还没有执行完 ...

  9. 关于Cefsharp无法拖动Dom元素的解决方法

    如图所显示,Cefsharp在嵌入网页,页面有对Dom元素的拖动的操作,独立在浏览器上对网页元素的拖动是没有问题的,但是嵌入到Cefsharp上显示禁用的图标.排查了H5的代码,没有写入禁用拖动的操作 ...

  10. Vue安装Vue Devtools调试工具提示 Error: Cannot find module '@vue-devtools/build-tools' 解决办法

    我看网络上面安装Vue Devtools 调试工具的步骤几乎都是按照文章链接里的步骤进行安装, 但是在最终执行编译命令的时候 :npm run build ,提示如下错误: 尝试了很多方法,都不能解决 ...