有什么区别:
eval echo lala
Run Code Online (Sandbox Code Playgroud)
和:
command="echo lala"
$command
Run Code Online (Sandbox Code Playgroud)
他们似乎都有相同的效果,但我可能会遗漏一些东西.而且,如果它们确实具有相同的效果,那么eval
命令点是什么?
试试这个:
y='FOO=hello; echo $FOO'
eval $y
Run Code Online (Sandbox Code Playgroud)
它打印hello
.但是这个:
$y
Run Code Online (Sandbox Code Playgroud)
说:
-bash:FOO = hello;:找不到命令
所以当你说它eval $y
就像你输入$y
了解释器的内容一样.但是当你只是说它$y
需要是一个可以运行的命令时,而不是解释器需要解析的其他一些令牌(在上面的例子中,是一个变量赋值).
如果您知道变量包含可执行命令,则可以在不使用它的情况下运行它eval
.但是,如果变量可能包含Bash代码,而不是简单的可执行命令(即您可以想象传递给C函数的东西exec()
),则需要eval
.