Shell命令替换反引号``与$()的区别

在shell中定义变量时,除了直接定义外,还可以通过命令替换的方式将命令的输出结果赋值给变量。比如将系统当前时间赋值给变量DATE:

DATE1=`date`
DATE2=$(date)
echo $DATE1
echo $DATE2

但是在使用变量替换时要注意,如果变量的输出包含多行或者多个连续空白符时,在输出变量值时需要用双引号将变量包围起来,否则系统会用默认的空白符进行填充,导致换行无效多个连续空白符压缩为一个。如获取目录下的文件和字目录信息:

LS1=`ls`
echo $LS1
echo "$LS1"

运行结果为:

anaconda-ks.cfg Desktop Documents Downloads Music Pictures Public Templates Videos
anaconda-ks.cfg
Desktop
Documents
Downloads
Music
Pictures
Public
Templates
Videos

通常情况下两种形式的变量替换是等价的,但是两者还有一点区别,反引号``不支持嵌套而$()则支持嵌套,如计算目录下第一个文件的行数:

lines=$(wc -l $(ls | sed -n '1p'))
echo $lines

输出结果为:

89 anaconda-ks.cfg

此外,$() 仅在 Bash Shell 中有效,而反引号可在多种 Shell 中使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值