【linux】shell中命令替换$(cmd)和符号`cmd`

本文介绍了在Shell脚本中使用反引号(`cmd`)和$()(如$(cmd))来执行命令并获取其输出的方法。这两种方式虽然功能相似,但存在一些关键差异,包括在多层嵌套命令中的表现及易读性等方面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

来源:https://zhidao.baidu.com/question/485498670.html

 

作用

$(cmd)和`cmd`的作用是相同的,在执行一条命令时,会先将其中的 ``,或者是$() 中的语句当作命令执行一遍,再将结果加入到原命令中重新执行,例如:
echo `ls`
会先执行 ls 得到xx.sh等,再替换原命令为:
echo xx.sh
最后执行结果为
xx.sh

例子:

date=`date -d '1 day ago' "+%Y-%m-%d"`
echo $date
#结果:2017-01-09
date=$(date -d '1 day ago' "+%Y-%m-%d")
echo $date
#结果:2017-01-09

或者在shell脚本中像下面这样使用

for path in `find $HADOOP_HOME -name "*.jar"`
do
        export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$path
done

 

区别

1, 反引号很容易与单引号搞混乱,对初学者来说。有时在一些奇怪的字形显示中,两种符号是一模一样的(直竖两点)。用$()可以更好的避免这种混乱

2, 在多层次的复合替换中,反引号须要额外的跳脱( /` )处理,而 $( ) 则比较直观。例如:
`com1`com2`` 你这么写就是错的。需要`com1/`com2/``如果有多个命令嵌套就比较复杂了。而用$()就比较直观比如$(com1$(com2$(com3)))

 如果是多个命令的话可以用;隔开。比如$ { var1=test1;var2=test2;echo $var1>a;echo $var2;}



不过,$( ) 并不是没有毙端的...
反引号 基本上可用在全部的 unix shell 中使用,若写成 shell script ,其移植性比较高。
而 $() 并不见的每一种 shell 都能使用.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值