Linux--shell中的命令替换``与$()以及eval命令

本文介绍了Shell中的两种命令替换方式:``反单引号与$()括号。文章详细对比了这两种命令替换方式的特点及应用场景,并通过示例展示了它们在多层次复合替换中的不同表现。此外,还介绍了eval命令的功能,包括其如何实现对复杂变量的两次扫描,以及如何执行含有字符串的命令。

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

“与$()

shell命令替换:
命令替换与变量替换差不多,都是用来重组命令行的,先完成引号里的命令行,然后将其结果替换出来,再重组成新的命令行。

shell中命令替换符有两种``$()
例:

date=1
echo $(date)
DATE=`date`
echo $(DATE)

两者都起到了同样的效果,都是起到命令替换的作用。
但是,两者还是有细微的不同。
1.``反单引号适用于任何类unix平台,他的适用性比较高。但是$符号却不是。
2.在初期学习的时候反单引号``容易造成视觉误差。
3.在多层次的复合替换中``之间需要反斜线()处理,但是$()就比较直观。

date3的结果作为date2的参数,再将此结果作为参数传给date1
date1 $(date2 $(date3))

如果用``则表示为
date1 `date2\ `date3\``

很明显$()更直观。

eval命令

eval命令将会首先扫描命令行进行所有的置换,然后再执行该命令。
该命令对变量进行两次扫描。这些需要进行两次扫描的变量有时被称为复杂变量。不过这些变量本身并不复杂。

1.该变量可以执行含有字符串的命令
例如
首先创建一个test文件,并给此文件写一些简单地文本。
接着将test赋给myfile,现在echo myfile,我们发现只能显示出cat test并不能显示出test内的内容。但是当我们执行eval echo myfile就能显示出test内的内容。
这里写图片描述
这里写图片描述
结论:
从上面的结果可以看出,使用eval命令不但可以置换该变量,还能够执行相应的命令。第一次扫描进行了变量置换,第二次扫描执行了该字符串中所包含的命令cat test。

2.该命令可以显示传递给脚本的最后一条命令
这里写图片描述
这里写图片描述
在上面的脚本中, eval命令首先把 #解析为当前shell的参数个数,然后在第二次扫描时得出最后一个参数。

3.给每个值一个变量名
希望该文件中的第一列成为变量名,第二列成为该变量的值,这样就可以写:
这里写图片描述
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值