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
随机推荐
- vector subscript out of range
报这个错时会弹出一个窗口,貌似内存溢出,这是什么由于vector存放的数据超出了vector的大小所造成的. 解决方法如下: 在Vector<string> vector之后,不能直接通过 ...
- swagger-ui 系统配置过程(基于spring+springmvc+swagger+springfox配置 web-api 管理系统)
web工程部分框架信息:spring springmvc swagger springfox maven 参考文档:https://www.cnblogs.com/exmyth/p/7183753.h ...
- js手写数组Api--模拟实现常见数组Api
数组的API经常用,但是api的内部实现还没研究过,于是就研究学习了下. 原文地址: https://www.cnblogs.com/yalong/p/11606865.html 数组的API的具体使 ...
- openstack思维导图
RABBITMQ memcache keystone glance nova neutron cinder horizon
- python连接mysql数据库实例demo(银行管理系统数据库版)
主函数: import adminView import os import pickle from bankFunction import BankFunction import time def ...
- Redis 部署安装
一.Redis介绍 Redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统.和Memcache类似,但很大程度补偿了Memcache的不足,它支持存储的value类型相对更多 ...
- Kafka管理与监控——调优
1.JVM参数配置优化 如果使用的CMS GC算法,建议JVM Heap不要太大,在4GB以内就可以.JVM太大,导致Major GC或者Full GC产生的“stop the world”时间过长, ...
- Mac配置React Native开发环境
一直觉得学习一样东西,不动手怎么也学不会,就像学习swift,看了视频没有动手操作,记住的也就那么点,自己写出东西不是这里有问题就是那里出错. 所以,以后学习自己要多动手. 现在我的学习任务就是: 提 ...
- java数据结构之ConcurrentHashMap
大神博客:https://www.cnblogs.com/study-everyday/p/6430462.html https://baijiahao.baidu.com/s?id=16170899 ...
- SQL SERVER CLR Trigger功能
通过在 Microsoft SQL Server 中托管 CLR(称为 CLR 集成),开发人员可以在托管代码中编写存储过程.触发器.用户定义函数.用户定义类型和用户定义聚合函数, 改变了以前只能通过 ...