Shell $()、${}、$[]、$(())
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 $()、${}、$[]、$(())的更多相关文章
- 10、Cocos2dx 3.0游戏开发找小三之容器篇:Vector、Map、Value
重开发人员的劳动成果.转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27705613 容器 3.0版本号之前Cocos2d- ...
- GPRS的工作原理、主要特点
源:http://blog.csdn.net/sdudubing/article/details/7682467 GPRS的工作原理.主要特点: 引 言 近年来,通信技术和网络技术的迅速发展,特别是无 ...
- ES6学习笔记<五> Module的操作——import、export、as
import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小 ...
- ArcGIS Enterprise 10.5.1 静默安装部署记录(Centos 7.2 minimal)- 6、总结
安装小结 安装完成后,首先我们需要将Datastore托管给Server,再将Server托管给Portal以此来完成整个单机版Enterprise 部署流程.为了测试流程是否正确,我们可以采用上传一 ...
- 19、Cocos2dx 3.0游戏开发找小三之Action:流动的水没有形状,漂流的风找不到踪迹、、、
重开发人员的劳动成果.转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/30478985 流动的水没有形状.漂流的风找不到踪迹. ...
- POJ 3159 Candies、
题意:n个小孩,m个比较(给你两个孩子代号a,b.然后c意味着a比b最多只能少c个糖果),问1和n之间差距最大的糖果数量. 思路:这是一个差分约束思路 不懂得:传送门, 转化一下就是一个SPFA求最短 ...
- Educational Codeforces Round 10 A B题、
A. Gabriel and Caterpillar 题意: 就是说 一个小孩子去观察毛毛虫从 h1的地方爬到h2的地方.毛毛虫从10点爬到22点.每小时爬的距离是a, 晚上22点到第二天早上10点 ...
- 最小生成树prim、
过年那几天确实没好好学习.在老家闲着也是闲着.可是就是没看书. 回来这几天又一直在弄个人博客.买域名云服务器备案什么的- -. 麻烦死了呢. 在腾讯花1块钱备案了一个网站www.goodgoodstu ...
- Linux-shell-算术运算{expr、bc、dc、(( ))和[ ]}
Linux-shell-算术运算{expr.bc.dc.(( ))和[ ]} 摘自: https://www.cnblogs.com/snowsolf/p/3325235.html 在Linux下做算 ...
- CocoaPods的安装、使用、以及遇到的问题
CocoaPods是什么? 当你开发iOS应用时,会经常使用到很多第三方开源类库,比如JSONKit,AFNetWorking等等.可能某个类库又用到其他类库,所以要使用它,必须得另外下载其他类库,而 ...
随机推荐
- Spring Security:简单的保护一个SpringBoot应用程序(总结)
Spring Security 在 Java类中的配置 在 Spring Security 中使用 Java配置,可以轻松配置 Spring Security 而无需使用 XML . 在Spring ...
- hdu 5172 GTY's gay friends(线段树最值)
题意: GTY有n个朋友,站成一排,每个人有一个特征值ai. 有m个询问.每次询问给两个数L,R.问你[L,R](即aL...aR)是否是1..(R-L+1)的一个全排列. 是输出YES,否则输出NO ...
- 如何选择普通索引和唯一索引《死磕MySQL系列 五》
系列文章 一.原来一条select语句在MySQL是这样执行的<死磕MySQL系列 一> 二.一生挚友redo log.binlog<死磕MySQL系列 二> 三.MySQL强 ...
- # Host xx.xxx.x.xxx found: line 1 /root/.ssh/known_hosts updated. Original contents retained as /root/.ssh/known_hosts.old
一直可以ssh登录远程服务器,突然不行了. 原因:远程服务器最近打过安全补丁,安全标识已经更新. 清理本机的安全密匙即可 解决办法: #ssh-keygen -R "需要远程服务器ip地址& ...
- 【Azure 存储服务】如何把开启NFS 3.0协议的Azure Blob挂载在Linux VM中呢?(NFS: Network File System 网络文件系统)
问题描述 如何把开启NFS协议的Azure Blob挂载到Linux虚拟机中呢? [答案]:可以使用 NFS 3.0 协议从基于 Linux 的 Azure 虚拟机 (VM) 或在本地运行的 Linu ...
- Java开发介绍之JDK JRE JVM 和 环境变量配置
一.JDK>JRE>JVM JDK(Java Development Kit):Java开发工具包 JDK中包含JRE,在JDK的安装目录下有一个名为jre的目录,里面有两个文件夹bin和 ...
- Django笔记&教程 7-1 基于类的视图(Class-based views)介绍
Django 自学笔记兼学习教程第7章第1节--基于类的视图(Class-based views)介绍 点击查看教程总目录 1 介绍 Class-based views (CBVs) are view ...
- OpenShift 本地开发环境配置(基于 Minishift)
本文要做什么? 很多为了验证应用在 OpenShift 平台的行为是否正常,或者组成一个简单的开发环境,直接搭建一个 OpenShift/Origin 环境可能太重了,而且运行在本机可能占用内存也太多 ...
- [atAGC022D]Shopping
称0到$L$的方向为左,同时为了方便,可以假设$0<t_{i}\le 2L$ 当我们确定是进入店中的方向,根据这个店的位置以及购物时间,不难确定出来时火车经过0或$L$的次数,由于$0<t ...
- [atARC084D]Small Multiple
构造一张图:$\forall x$,向$10x$连一条边权为0的边,向$x+1$连1条边权为1的边,那么0到$i$的代价即为$i$各位数字之和 考虑到我们只关心于当前点的两个特征:1.模$n$的余数( ...