shell中$(( ))、$( )、``与${ }的区别详解
命令替换
在bash中,$( )与` `(反引号)都是用来作命令替换的。
命令替换与变量替换差不多,都是用来重组命令行的,先完成引号里的命令行,然后将其结果替换出来,再重组成新的命令行
[python@master2 shell]$ echo today is $(date "+%Y-%m-%d")
today is 2019-03-04
[python@master2 shell]$ echo today is `date "+%Y-%m-%d"`
today is 2019-03-04
$( )与`` 在操作上,这两者都是达到相应的效果,但是建议使用$( ),理由如下:
``很容易与''搞混乱,尤其对初学者来说,而$( )比较直观。
最后,$( )的弊端是,并不是所有的类unix系统都支持这种方式,但反引号是肯定支持的。
[python@master2 shell]$ echo Linux `echo Shell `echo today is `date "+%Y-%m-%d"```
Linux Shellecho today is 2019-03-04
[python@master2 shell]$
[python@master2 shell]$ echo Linux `echo Shell $(echo today is $(date "+%Y-%m-%d"))`
Linux Shell today is 2019-03-04
[python@master2 shell]$
[python@master2 shell]$ echo Linux $(echo Shell $(echo today is $(date "+%Y-%m-%d")))
Linux Shell today is 2019-03-04
${ }变量替换
一般情况下,$var与${var}是没有区别的,但是用${ }会比较精确的界定变量名称的范围
[python@master2 shell]$ A=Hello
[python@master2 shell]$ echo $A
Hello
[python@master2 shell]$ echo $AB #表示变量AB
[python@master2 shell]$
[python@master2 shell]$ echo ${A}B #表示变量A后连接着B
HelloB
取路径、文件名、后缀
# 是去掉左边(在键盘上 # 在 $ 之左边)
% 是去掉右边(在键盘上 % 在 $ 之右边)
单一符号是最小匹配;两个符号是最大匹配
* 是用来匹配不要的字符,也就是想要去掉的那部分
还有指定字符分隔号,与*配合,决定取哪部分
[python@master2 shell]$ file=/dir1/dir2/dir3/my.file.txt
[python@master2 shell]$ echo ${file#*/} 一个#匹配第一个/左边的不要
dir1/dir2/dir3/my.file.txt
[python@master2 shell]$ echo ${file##*/} 两个#匹配最后一个/左边的不要
my.file.txt
[python@master2 shell]$ echo ${file%/*} %最后一个/及其右边的所有字符
/dir1/dir2/dir3
[python@master2 shell]$ echo ${file%%/*} 拿掉第一个/及其右边的字符串 (空)
数组
A="a b c def" # 定义字符串
A=(a b c def) # 定义字符数组

$(( ))与整数运算

[python@master2 shell]$ echo $((2*3))
6
[python@master2 shell]$ a=5;b=7;c=2
[python@master2 shell]$ echo $((a+b*c))
19
[python@master2 shell]$ echo $(($a+$b*$c))
19
(())重定义变量值
[python@master2 shell]$ a=5;b=7
[python@master2 shell]$ ((a++))
[python@master2 shell]$ echo $a
6
[python@master2 shell]$ ((a--));echo $a
5
[python@master2 shell]$ ((a<b));echo $?
0
[python@master2 shell]$ ((a>b));echo $?
1
随机推荐
- OpenAPI规范入门
由于API对于我们的软件运行方式至关重要,因此记录我们的API对于确保我们大型IT组织中的每个人都了解正在发生的事情至关重要,这就是我们使用OpenAPI来帮助记录API规范的原因. 在本文中,我将向 ...
- 计算机组成原理 — GPU 图形处理器
目录 文章目录 目录 显卡 GPU GPU 与深度学习 GPU 与 CPU 体系结构的区别 GPU 显存与 CPU 主存的区别 GPU 与 CPU 之间的数据交互方式 GPU 的体系结构 GPU 的工 ...
- vue项目报错:Unexpected tab character (no-tabs)
eslint意思是检查规范代码 第一种方法: 新建项目的时候 第二种方法: 首先在项目的根目录下.eslintrc.js中加入一行代码:"no-tabs":"off&qu ...
- MATLAB学习(十)实现文件、图像读写
t=1:5; s1=sin(t); s2=cos(t); s=[t;s1;s2]; fid1=fopen('test.dat','wt'); fprintf(fid1,'\nThis is a For ...
- React Native安卓代码混淆和打包
一上午就整了个React Native的打包,中间还遇到各种问题,这里还是记录下吧: 文档链接: http://reactnative.cn/docs/0.45/signed-apk-android. ...
- Leetcode之动态规划(DP)专题-198. 打家劫舍(House Robber)
Leetcode之动态规划(DP)专题-198. 打家劫舍(House Robber) 你是一个专业的小偷,计划偷窃沿街的房屋.每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互 ...
- C#对IQueryable<T>、IEnumerable<T>的扩展方法
#region IQueryable<T>的扩展方法 #region 根据第三方条件是否为真是否执行指定条件的查询 /// <summary> /// 根据第三方条件是否为真是 ...
- SpringMvc框架 解决在RESTFUL接口后加任意 “.xxx” 绕过权限的问题
问题描述: 框架使用的是SpringMVC.SpringSecurity,在做权限拦截的时候发现一个问题,假设对请求路径/user/detail进行了权限拦截,在访问/user/detail.abc的 ...
- git升级与报错问题
一般小于1.7.10的 git 版本会报如下错 error: The requested URL returned error: 401 Unauthorized while accessing 解决 ...
- Spring的Bean的生命周期(大众版)
距离上一次写Spring源码解析,已经过去了快要好几个月了,主要原因还是Spring的源码解析类文章太难写了,不像我先前写的什么CAS源码,AQS源码,LinkedBlockingQueue等等, ...