Bash eval命令及其常见用法

本文深入探讨了Bash shell中的eval命令,包括其语法、使用场景及其在脚本编程中的优势。通过具体示例展示了如何利用eval进行参数解析、字符串操作和动态命令执行,为读者提供了实用的编程技巧。

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

POSIX的解释:

eval - construct command by concatenating arguments

先感受下面的几行命令:

[root@localhost shell]# set -- one two three  # 设置 $1 $2 $3
[root@localhost shell]# echo $1
one
[root@localhost shell]# n=1
[root@localhost shell]# echo ${$n} ## 第一次尝试用大括号
bash: ${$n}: bad substitution
[root@localhost shell]# echo $($n) ## 第二次尝试用小括号
bash: 1: command not found

[root@localhost shell]# echo ${!n} ## 第三次尝试用!解析
one
[root@localhost shell]# eval echo \${$n}
one
[root@localhost shell]# 

可以看出,最后两次的n被当成变量解析了。
${$n} 是语法错误。在大括号中只能出现带前缀或后缀的变量名。这时可以用下面的方式:

echo ${!n}

$(...) 这个命令将小括号内的命令在新的进程中执行,即继承了当前shell变量和设置的子shell,并接收它的输出。所以$($n)$n 当作一个shell命令。
eval echo \${$n} 把参数传给 eval

下面讲一个小程序:

#!/bin/bash

count=$#   # 参数个数
cmd=echo
while [ $count -gt 0 ]
do
    cmd="$cmd \$$count"       # cmd后接 $count
    count=`expr $count - 1`   # $count减1
done
eval $cmd	# 解析 $cmd 并执行

执行结果:

[root@localhost shell]# bash eval.sh hello world to bash shell
shell bash to world hello

参考文章:
What is the “eval” command in bash?
eval command in Bash and its typical uses

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值