shell语法之${},``,$(),$(())四种语法含义

1.${ } 变量、截取、替换

${ } 通常是获取变量的值,但也可以进一步对变量的值进行"加工"处理,例如:字符串的截取,替换

1.1 获取变量值

${}获取变量的值,下面例子,定义了变量a,值test

[root@zxp1 /opt/script]# a=test
[root@zxp1 /opt/script]# echo $a     //可以省略{}
test
[root@zxp1 /opt/script]# echo ${a}  
test
[root@zxp1 /opt/script]# echo $ab    //这种情况会造成字段不能识别,字段边界模糊的问题

[root@zxp1 /opt/script]# echo ${a}b  //通过{}可以清晰表示字段名称的边界
testb
1.2 字符串截取

获取变量值只是它的基本功能, {}获取变量值只是它的基本功能, 获取变量值只是它的基本功能,{}内部还支持变量替换,变量截取,先看看基本语法

通过删除不需要的部分子串来截取

#是去掉左边(键盘上#在 $ 的左边)
%是去掉右边(键盘上% 在$ 的右边)
单一符号#,%是最小匹配;两个符号##,%%是最大匹配

这种语法,我自己给他取个名字,“砍头去尾” 语法,这个用法通常会搭配通配符 ’ * ’ 来使用。
为什么叫砍头去尾呢?看下下面例子
如下,定义变量path=/etc/sysconfig/network

[root@zxp1 ~]# path=/etc/sysconfig/network
[root@zxp1 ~]# echo ${path#*/}     //去掉path变量左边 第一次出现 */  子串    *代表匹配任意0或0个以上字符
etc/sysconfig/network
[root@zxp1 ~]# echo ${path#tc}     //像这样是匹配不成功的,第一个字符‘t’ 与 左边第一个字符‘/’没匹配上,直接就结束了
/etc/sysconfig/network
[root@zxp1 ~]# echo ${path##*/}    //最大匹配
network
[root@zxp1 ~]# echo ${path%/*}     //去掉path变量右边匹配的子串
/etc/sysconfig
[root@zxp1 ~]# echo ${path%%/*}  

[root@zxp1 ~]#
通过字符坐标获取

第一个 “:” 后面数字代表字符开始的位置,第二个 ":"后面数字代表要获取子串的长度

[root@zxp1 ~]# echo ${path:0:5}
/etc/
[root@zxp1 ~]# echo ${path:3:7}
c/sysco
1.3 字符替换
[root@zxp1 ~]# echo ${path/et/op}   //第一个出现的et替换成op
/opc/sysconfig/network
[root@zxp1 ~]# echo ${path//et/op}  //所有出现的et替换成op
/opc/sysconfig/nopwork

2. ``与$() 命令替换

``和$() 内部通常是一个shell命令,在执行脚本之前,会先执行这个命令,相当于函数调用

[root@zxp1 ~]# echo date           //直接当成字符串输出
date
[root@zxp1 ~]# echo `date`         //相当于函数调用,先执行date命令
Tue Sep 3 16:10:43 CST 2019
[root@zxp1 ~]# echo $(date)       //作用与上面的命令一样,但不是所有版本的linux系统都支持
Tue Sep 3 16:11:45 CST 2019

3.$(())与expr 整数运算

[root@zxp1 ~]# echo $((3+2))
5
[root@zxp1 ~]# echo $((3*2))
6
[root@zxp1 ~]# echo `expr 2+3`   //运算符前后需要空格
2+3
[root@zxp1 ~]# echo `expr 2 + 3` 
5
[root@zxp1 ~]# echo `expr 2 * 3` //会提示语法错误,需要转义
expr: syntax error
[root@zxp1 ~]# echo `expr 2 \* 3`
6
  • 21
    点赞
  • 159
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值