Linux脚本混乱
这个脚本中的“eval”在做什么?这算什么Linux脚本混乱,linux,bash,shell,Linux,Bash,Shell,这个脚本中的“eval”在做什么?这算什么 #!/bin/bash n=1 for i `eval echo {1..$1}` do n=$((n * i)) done eval echo{1..$1}生成从1到第一个参数的所有数字的列表。然后循环遍历所有这些值并将它们相乘到n,生成n {a..b}语法生成从a到b的所有数字的列表。您必须调用eval,因为。语法需要数字,而不是变量-在运行命令之前放置eval允许变量替换 我还怀疑您想在'eval
#!/bin/bash
n=1
for i `eval echo {1..$1}`
do
n=$((n * i))
done
eval echo{1..$1}
生成从1
到第一个参数的所有数字的列表。然后循环遍历所有这些值并将它们相乘到n
,生成n代码>
{a..b}
语法生成从a
到b
的所有数字的列表。您必须调用eval
,因为。
语法需要数字,而不是变量-在运行命令之前放置eval
允许变量替换
我还怀疑您想在'eval echo{1..$1}`
中为I编写,而不是为I'eval echo{1..$1}`
编写,因为后者会生成语法错误。eval echo{1..$1}
生成从1
到第一个参数的所有数字的列表。然后循环遍历所有这些值并将它们相乘到n
,生成n代码>
{a..b}
语法生成从a
到b
的所有数字的列表。您必须调用eval
,因为。
语法需要数字,而不是变量-在运行命令之前放置eval
允许变量替换
我还怀疑您想在`eval echo{1..$1}`
中为I编写,而不是为`eval echo{1..$1}`
编写,因为后者会生成语法错误。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
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
为避免混淆和使用eval
,您可以使用:
for((i=1;i为避免混淆和使用eval
您可以使用:
for((i=1;反勾号用于计算表达式;eval
用于计算从1扩展到$1的大括号(函数的参数)。我认为,`echo{1..$1}中的用于i使用<代码> EVA/COD>通常是不好的。考虑使用<代码> SEQ < /代码>代替:<代码>我在“SEQ 1 $ 1”;执行回音$i;完成“< /代码>”。回退评估表达式;<代码> EVA/COD>评估从1扩展到1元的卷曲括号(函数的参数)。使用<代码> EVA/COD>通常是不好的。考虑使用<代码> SEQ < /代码>代替:<代码>我在“SEQ 1 $ 1”;执行ECH$i;完成< /代码>。是的,我确实忘记了“in”。谢谢解释。RE:“代码> EVA/COD>在运行命令之前做变量替换”。:一般来说这是正确的,但在本例中没有参数替换。在调用eval
之前,$1
被替换为5
。是的,我确实忘记了“in”。感谢您的解释。Re:“eval
在运行命令之前进行变量替换”:一般来说,这是正确的,但在这种情况下,没有参数替换它。在调用eval
之前,$1
被替换为5
。谢谢,这很有意义!谢谢,这很有意义!C语言对我来说总是更有意义。C语言对我来说总是更有意义。