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
随机推荐
- 两个input之间有空隙,处理方法
			
修改css,给前边一个input添加一个左浮动. <input id="day" type="button" value="日" ...
 - java+服务器上传和下载文件
			
1.介绍enctype enctype 属性规定发送到服务器之前应该如何对表单数据进行编码. enctype作用是告知服务器请求正文的MIME类型(请求消息头content-type的作用一样) 1. ...
 - Perfect-Server-Swift学习记录
			
开发环境搭建: https://github.com/Perfect-Server-Swift-LearnGuide/PerfectLearnGuide 中文文档学习: https://www.per ...
 - UITableView+FDTemplateLayoutCell计算行高显示<二>
			
之前记录过一篇UITableView+FDTemplateLayoutCell计算行高不成功的博客... 传送门:http://www.cnblogs.com/pengsi/p/6571311.htm ...
 - Java泛型(6):extends和super关键字
			
(1) <T extends A> 因为擦除移除了类型信息,而无界的泛型参数调用的方法只等同于Object.但是我们可以限定这个泛型参数为某个类型A的子集,这样泛型参数声明的引用就可以用类 ...
 - Java数据结构之TreeMap
			
一.源码注释 /** * TreeMap基于NavigableMap 的一个红黑树的实现.TreeMap会根据比较器comparator对键值对的key进行比较进行排序,如果没有比较器就是用key的自 ...
 - .NET Core WebApi中返回 json 数据首字母大小写问题
			
public void ConfigureServices(IServiceCollection services) { services.AddMvc().AddJsonOptions(opt =& ...
 - 20190903 - CSDN 的奇葩替换
			
可能是出于安全原因 CSDN 对内容中的代码,作了很多奇葩的替换. 比如下面两行,是否有差别? # - # -16 有.其实 cut 后的短横线,内部编码不同,前者复制后无法被识别. 再比如下面两个词 ...
 - 记录运行时间 StopWatch
 - 【计算机视觉】极限优化:Haar特征的另一种的快速计算方法—boxfilter
			
这种以Boxfilter替代integral image 的方法很难使用到haar.LBP等特征检测中,因为像下面说的,它不支持多尺度,也就是说所提取的特征必须是同一个大小,最起码同一个宽高比的,这一 ...