如何在 Linux 命令中使用 eval if string conatins 特殊字符,例如 - [closed]

how to use eval in linux command if string conatins special character such as - [closed]

提问人:XYZ 提问时间:11/18/2023 最后编辑:Charles DuffyXYZ 更新时间:11/18/2023 访问量:46

问:


想改进这个问题吗?通过编辑这篇文章添加详细信息并澄清问题。

6天前关闭。

我试过这个命令

eval('my-value')

但是这个错误

File "<string>", line 1, in <module>
NameError: name 'my' is not defined

但是如果我尝试

eval('myval')

我明白了

  File "<string>", line 1, in <module>
NameError: name 'myval' is not defined

为什么它在第一个命令中以不同的方式读取 my 和 value?如何解决如果一个可变的名字conatins -

Python 评估

评论

0赞 Daniel A. White 11/18/2023
这看起来像 JavaScript,而不是 shell 语言
0赞 Daniel A. White 11/18/2023
由于这是 JavaScript,因此您正在值和myvalue
0赞 XYZ 11/18/2023
不,我正在尝试执行此命令python -c “import my_module;my_module.my_function(eval('var1'), eval('var2'))“,var1 的值是 my-value @DanielA.White
0赞 Charles Duffy 11/18/2023
Linux 标签应该只用于特定于 Linux 的问题,这意味着如果你尝试过,你不会在 Linux 之外引起问题。同样,命令行标记在这里也没有意义 - 以完全不涉及命令行的方式运行相同的代码也会遇到同样的问题。
0赞 Charles Duffy 11/18/2023
通过编辑来澄清您的问题;为了公平起见,仅出现在评论中的内容不算作问题的一部分,可以用于撰写答案(因此,根据对规则的严格解释,@NapoleanDynamite不应该编辑以考虑您的上述评论,直到您更新您的问题以纳入该评论的内容)。

答:

1赞 NapoleonDynamite 11/18/2023 #1

(已编辑) 这显然不是 linux 命令吗?看来您是在 python 环境中而不是 shell。

如果是这种情况,您可能应该做类似的事情:

your_value = eval('myval')

好的,给定您的新上下文,您可以尝试在整个命令周围使用双引号,在 eval 中的字符串参数周围使用单引号,例如:

python -c "import my_module; my_module.my_function(eval('\"$var1\"'), eval('\"$var2\"'))"

根据需要更改 var1 和 var2

评论

0赞 XYZ 11/18/2023
不,我正在尝试执行此命令python -c “import my_module;my_module.my_function(eval('$var 1'), eval('$var 2'))“,var1 的值是 my-value,它显示文件”<string>“,第 1 行,在 <module>文件 ”<string>“,第 1 行,在 <module 中> NameError:未定义名称”my”
0赞 NapoleonDynamite 11/18/2023
我更新了我的答案:看看是否有帮助python -c "import my_module; my_module.my_function(eval('\"$var1\"'), eval('\"$var2\"'))"
0赞 XYZ 11/18/2023
非常感谢您了解我的背景
0赞 Charles Duffy 11/18/2023
你为什么要这样做,比如说,?(这也不是好的做法 - 远非如此 - 但是通过将内容注入到代码中嵌入为文本的字符串中,然后进行评估,而不是直接注入到代码中,您不会获得任何好处)。python -c "import my_module; my_module.my_function($var1, $var2)"
1赞 Matthias 11/18/2023
最好的主意是根本不使用。请阅读并理解:eval 真的很危险eval