【Linux】命令代换

1. ``  和 $() 

由反引号 `` 括起来的也是一条命令,Shell 先执行该命令,然后将输出结果立刻代换到当前命令行中。

例如定义一个变量存放 date 命令的输出:

命令代换用 ``  表示:DATE=`date`


命令代换也可以用 $() 表示:DATE=$(date)




       可以发现两个结果相同,但是建议使用 $() ,因为 ``(反引号) 容易和  '' (单引号)混淆,而且反引号在多层次命令代换的时候,必须要进行转义处理,它并不是所有平台都支持的一种命令代换方式。

注意:变量赋值左右不能加空格,变量不需要声明,直接使用即可。在定义变量时不用 $,作左值时也不需要 $,取变量值时要用 $ 变量,作右值时需要在变量名前加上 $。


区别:1)相对而言,$() 用起来较简洁点,反引号 `` 较容易混淆。

          2)多层次的替换中,反引号需要 / 处理,需要这样写 cmd/`cmd/`,写起来麻烦,看起来也不那么简洁。用 (),(cmd$(cmd)) 相对简单点。

          3)反引号基本在 shell 中使用,移植性较高,$() 不是。


算术代换:$(())

用于算术计算,$(()) 中的 Shell 变量取值将转换成整数,例如:


$(()) 中只能用 + - * / 和 () 运算符,并且只能做整数运算。



2. eval

用法:eval cmdline 

原理:eval 主要用在对参数的特殊处理上,一般的命令行,shell 对参数只执行一次。eval 会对后面的 cmdline 进行两次扫描,如果第一次扫描,cmdline 只是个普通命令,就直接执行命令。若 cmdline 的变量又间接引用,则扫描第二次,执行间接引用的语义。这些需要进行两次扫描的变量也叫做复杂变量。


例如: 



当直接用 echo $cmd 时,只进行一次扫描,所以是 echo hello world。当 eval $cmd 时,cmd 里有间接引用,进行第二次扫描,所以是hello world。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值