【shell脚本】eval命令详解及命令代换

3 篇文章 0 订阅

1.命令代换

在shell脚本语言中有两种命令代换方式

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

DATE=`date`
echo $DATE

2>也可以使用 $() 代换

DATE=$(date)

示例:


两者间的区别和联系:

联系:均可用于命令代换

区别:1) Bash中的后置引用 `COMMAND`会将命令中的\\转义为\再执行,而$(COMMAND)则不会进行转义


2).$(...)形式的命令替换是允许嵌套的
在多层次的复合替换中,反引号须要额外的跳脱( \` )处理,而 $( ) 则比较直观。例如:
`cmd1`cmd2`` 你这么写就是错的。需要`cmd1\`cmd2\``如果有多个命令嵌套就比较复杂了。而用$()就比较直观比如$(cmd1$(cmd2$(cmd3))) 
但是,$( ) 也是有缺点的
反引号 基本上可用在全部的 unix shell 中使用,若写成 shell script ,其移植性比较高。而 $() 并不见的每一种 shell 都能使用.



2.eval

1.eval命令将会首先扫描命令行进行所有的替换,然后再执行命令。该命令使用于那些一次扫描无法实现其功能的变量。该命令对变量进行两次扫描。这些需要进行两次扫描的变量有时候被称为复杂变量。

2.eval也可以用于回显简单变量,不一定时复杂变量。
NAME=ZONE
eval echo $NAME等价于echo $NAME
3.两次扫描

从echo $FILE可以知道第一次扫描进行了变量替换,第二次扫描执行了该字符串中所包含的命令


4.获得最后一个参数
echo "Last argument is $(eval echo \$$#)"


在上面的脚本中,eval命令首先把$ $ #解析为当前shell的参数个数,然后在第二次扫描时得出最后一个参数。

4.给每个值一个变量名
可以给一个值一个变量名。假定有一个名为test2的文件:
你希望该文件中的第一列成为变量名,第二列成为该变量的值,这样就可以:

cat test2
COMMANY TQ
LANGUE ENGLISH
LIKE YES

#!/bin/bash
while read NAME VALUE
do
eval "${NAME}=${VALUE}"
done <test2
echo "$COMMANY $LANGUE $LIKE"

./test3
TQ ENGLISH YES




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值