linux - 当在字符串中作为 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 没有被初始化?
解决方案
使用单引号进行分配,cmd
因此$x
在分配时尚未使用。
另外,在你的论点周围加上双引号eval
(它防止的错误更加微妙,并且不会影响你当前的字符串,但是当你击中它们时它们是严重的)。
cmd='for x in This is good; do echo "$x"; done'
eval "$cmd"
注意echo "$x"
而不是echo $x
-- 看到我刚刚分配了一个变量,但echo $variable
显示了一些不同的东西!
推荐阅读
- c# - 将 SQL 查询转换为 linq lambda Entity Framework Core
- postgresql - 聚合函数作为元组参数 postgres
- python - 你如何比较字典和列表
- websphere - 如何在项目的资产类型中添加笔记本?
- javascript - 有没有办法使用 javascript 将样式应用于突出显示的文本?
- google-apps-script - 如何从谷歌脚本向 BigQuery 发出正确的 HTTP 请求
- java - Spring Boot 2.x Servlet Path 在测试中被忽略
- php - 在 Lumen 7 中验证时如何返回自定义 JSON 数组名称和内部元素?
- python - 如何检查是否在tkinter的文本字段中单击了左键?
- mongodb - Docker:等待 Mongodb ReplicaSet