这个脚本中的“eval”是什么?这评价的是什么?
#!/bin/bash
n=1
for i `eval echo {1..$1}`
do
n=$((n * i))
done
答案 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}
语法生成从a
到b
的所有数字的列表。您必须调用eval
,因为..
语法需要数字而不是变量 - 在运行命令之前将eval
允许变量替换。
我还怀疑你想写for i in `eval echo {1..$1}`
而不是for i `eval echo {1..$1}`
,因为后者会产生语法错误。