首页 > 解决方案 > 当在字符串中作为 eval 的参数传递时,for 循环不起作用

问题描述

以下代码在 shell 脚本中作为单个命令运行时会给出预期结果:

for x in This is good; do echo $x; done

[输出]

This
is
good

但是,当我出于某种原因将它在字符串中传递给 Eval 时,x 没有被初始化

cmd = " for x in This is good; do echo $x ; done"
eval $cmd

[输出]

//Three blank lines

为什么 x 没有被初始化?

标签: linuxbashshell

解决方案


使用单引号进行分配,cmd因此$x在分配时尚未使用。

另外,在你的论点周围加上双引号eval(它防止的错误更加微妙,并且不会影响你当前的字符串,但是当你击中它们时它们是严重的)。

cmd='for x in This is good; do echo "$x"; done'
eval "$cmd"

注意echo "$x"而不是echo $x-- 看到我刚刚分配了一个变量,但echo $variable显示了一些不同的东西!


推荐阅读