Linux脚本混乱

时间:2013-12-14 00:48:19

标签: linux bash shell

这个脚本中的“eval”是什么?这评价的是什么?

#!/bin/bash    
n=1    
for i `eval echo {1..$1}`    
do    
   n=$((n * i))     
done

3 个答案:

答案 0 :(得分:2)

Eval执行它在参数中找到的shell命令。您需要这样做,因为..运算符要求其参数是文字数字,而不是变量。

eval echo {1..$1}

首先将$1的值替换为参数,作为正常变量替换的一部分。如果脚本的参数是5,则变为:

eval echo {1..5}

然后eval执行该命令,执行:

echo 1 2 3 4 5

由于这只是内部反引号,echo的输出被替换为for行,因此它变为:

for i in 1 2 3 4 5

答案 1 :(得分:2)

为避免混淆和eval的使用,您可以使用c-style for-loop

for ((i=1; i<=$1; i++))

答案 2 :(得分:0)

eval echo {1..$1}生成从1到第一个参数的所有数字的列表。然后循环遍历所有这些值并将它们乘以n,生成n!

{a..b}语法生成从ab的所有数字的列表。您必须调用eval,因为..语法需要数字而不是变量 - 在运行命令之前将eval允许变量替换。

我还怀疑你想写for i in `eval echo {1..$1}`而不是for i `eval echo {1..$1}`,因为后者会产生语法错误。