谁能帮忙解释这个shell脚本的功能(详细的) count=$# cmd=echo while[$count -gt 0] do cmd="cmd \$$coun

如题所述

题目不全,不过应该是倒序打印参数列表的程序。我估计完全的可能是这样
#! /bin/b.sh
count=$#
cmd=echo
while[ $count -gt 0 ]
do
cmd ="$cmd \$$count"
shift
done
eval $cmd
-----------------------------
示例运行
$: sh test.sh a b c d e
$: e d c b a

程序本身很无聊,主要就是想说明eval的用法(两次解析),可以看看书。追问

没有错呀,这是课后习题我原样又打出来了,能解释一下每一步的作用吗,谢谢了

追答

上面的程序请把shift换成 count=$((count - 1))
以示例运行为例说明:
$: sh -x test.sh a b c d e <== -x debug模式执行
+ count=5 <==开始时count等于传入参数的个数($#)
+ cmd=echo <==开始时cmd中只有echo
+ '[' 5 -gt 0 ']'
+ cmd='echo $5' <== 运算前cmd是echo; \$$count中第一个$由于\的保护未被解析,第二个则随count解析,被替换为count变量的值:5,于是执行完后cmd为 ‘echo $5'
+ count=4 <==count每运行一次 - 1
+ '[' 4 -gt 0 ']'
+ cmd='echo $5 $4'
+ count=3
+ '[' 3 -gt 0 ']'
+ cmd='echo $5 $4 $3'
+ count=2
+ '[' 2 -gt 0 ']'
+ cmd='echo $5 $4 $3 $2'
+ count=1
+ '[' 1 -gt 0 ']'
+ cmd='echo $5 $4 $3 $2 $1'
+ count=0
+ '[' 0 -gt 0 ']' <==count等于0,退出while循环
+ eval echo '$5' '$4' '$3' '$2' '$1' <==第一次解析,eval展开了cmd变量值,然后把展开的内容送回shell
++ echo e d c b a <==第二次解析,shell解析eval送回的结果
e d c b a <==这是程序输出

温馨提示:答案为网友推荐,仅供参考
相似回答