命令替换
在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

随机推荐

  1. vector subscript out of range

    报这个错时会弹出一个窗口,貌似内存溢出,这是什么由于vector存放的数据超出了vector的大小所造成的. 解决方法如下: 在Vector<string> vector之后,不能直接通过 ...

  2. swagger-ui 系统配置过程(基于spring+springmvc+swagger+springfox配置 web-api 管理系统)

    web工程部分框架信息:spring springmvc swagger springfox maven 参考文档:https://www.cnblogs.com/exmyth/p/7183753.h ...

  3. js手写数组Api--模拟实现常见数组Api

    数组的API经常用,但是api的内部实现还没研究过,于是就研究学习了下. 原文地址: https://www.cnblogs.com/yalong/p/11606865.html 数组的API的具体使 ...

  4. openstack思维导图

    RABBITMQ memcache keystone glance nova neutron cinder horizon

  5. python连接mysql数据库实例demo(银行管理系统数据库版)

    主函数: import adminView import os import pickle from bankFunction import BankFunction import time def ...

  6. Redis 部署安装

    一.Redis介绍 Redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统.和Memcache类似,但很大程度补偿了Memcache的不足,它支持存储的value类型相对更多 ...

  7. Kafka管理与监控——调优

    1.JVM参数配置优化 如果使用的CMS GC算法,建议JVM Heap不要太大,在4GB以内就可以.JVM太大,导致Major GC或者Full GC产生的“stop the world”时间过长, ...

  8. Mac配置React Native开发环境

    一直觉得学习一样东西,不动手怎么也学不会,就像学习swift,看了视频没有动手操作,记住的也就那么点,自己写出东西不是这里有问题就是那里出错. 所以,以后学习自己要多动手. 现在我的学习任务就是: 提 ...

  9. java数据结构之ConcurrentHashMap

    大神博客:https://www.cnblogs.com/study-everyday/p/6430462.html https://baijiahao.baidu.com/s?id=16170899 ...

  10. SQL SERVER CLR Trigger功能

    通过在 Microsoft SQL Server 中托管 CLR(称为 CLR 集成),开发人员可以在托管代码中编写存储过程.触发器.用户定义函数.用户定义类型和用户定义聚合函数, 改变了以前只能通过 ...