![我们是否需要评估一个字符串才能将其作为命令执行?](https://linux22.com/image/142375/%E6%88%91%E4%BB%AC%E6%98%AF%E5%90%A6%E9%9C%80%E8%A6%81%E8%AF%84%E4%BC%B0%E4%B8%80%E4%B8%AA%E5%AD%97%E7%AC%A6%E4%B8%B2%E6%89%8D%E8%83%BD%E5%B0%86%E5%85%B6%E4%BD%9C%E4%B8%BA%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C%EF%BC%9F.png)
在Python中,如果一个字符串代表一个语句,要执行它我们必须使用eval
.
在 Bash 中,为什么情况不一样呢?
$ cmd="ls"
$ $cmd
a.out company.png
答案1
Python 和 Bash 是完全不同的语言。 Python 的主要目的是执行内部语句,并附加执行外部程序的功能。 shell的主要目的是执行外部程序,添加了一些控制结构和内部命令。 Bash 比原始 shell 有更多的内部功能,但仍然保持兼容性。
shell 的功能之一是您可以定义变量并稍后在命令中扩展它们。基本上,您可以认为 shell 隐式地eval
对每个语句使用类似于 Python 的东西,尽管当然存在差异。
eval
如果正常级别的处理和替换不够并且您需要额外的级别,那么还有一个shell 命令可能有用但也很危险。它评估该行的其余部分并将结果提供给 shell 执行的正常替换。在您更好地理解和实际需要它之前,最好忘记此功能。