$( ),${ }和$(( ))

$( )

$( )在功能上和` `基本一样,都是先运行包含在其中的命令。区别在于两点:

1.` `嵌套时内层需要转义,如

command1 `command2 /`command3/` `

2.$( )兼容性相对差一点(bash和sh上完全可以使用)


${ }

1.${ }一般情况下就是取变量值,和$差不多。但前者可以精确界定变量名称的范围,这在添加变量内容时非常有用,如

A=B
echo $AB        #报错,找不到名为AB的变量

这时应这样

A=B
echo ${A}B        #结果为BB

也就是说${ }能将变量名与append的常量部分有效分隔开来

2.${ }的功能还不止于此,它还可以用作字符串处理,且${ }中可以用通配符:

  • ${#str}:获得字符串长度
  • ${str/substr/replacement}:将str中第一个substr替换为replacement
  • ${str//substr/replacement}:将str中所有substr替换为replacement
  • ${str:pos}:从索引pos开始提取substr(pos从0开始)
  • ${str:pos:len}:从索引pos开始提取长度为len的substr
  • ${str#substr}:删除第一个匹配的substr(左边)
  • ${str##substr}:删除最后一个匹配的substr(左边)
  • ${str%substr}, ${str%%substr}和#类似,不过是在右边
记忆方法:#去掉左边,%去掉右边,单符号是最小匹配,双符号是最大匹配

详见这里

3.${ }的第三个功能是针对不同变量状态进行赋值:

首先理解变量的三种状态:unset,null和non-null

  • ${var-default}:若var为unset,则返回default,否则返回原值(注意这里指“返回”,即无论var什么状态,在这个过程中它并不会被赋值)(返回原值的意思是将表达式${var-default}看作${var})
  • ${var+default}:若var为null或non-null,则返回default,否则返回原值(+和-形成互补)
  • ${var=default}:若var为unset,则返回default,并将default赋给var,否则返回原值
  • ${var?default}:若var为unset,则报错(报错信息为default),否则返回原值

相应的还有${var:-default}, ${var:+default}, ${var:=default}和${var:?default},区别在于带:则null受影响;不带:,则null不受影响

综上所述,${ }有三个功能:

  • 精确界定变量名范围,用于append
  • 字符串处理
  • 根据变量状态进行赋值(这里注意=和其他符号的区别,=会在一定条件下将default赋给var,而其他符号不会,只是单纯地返回值)

$(( ))
1.$(( ))用于整数运算,如
a=2; b=7; c=9
echo $((a*b+c))  #结果为23
2.$(( ))中的变量名前不要求$
3. 勿将$(( ))和(( ))混淆,前者是得出整数运算结果,后者是数值测试条件,也用于变量自增减(常用于for和while),如(( var++ ))

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值