'eval $ command'和$ command之间有什么区别?

NPS*_*NPS 4 bash eval

有什么区别:

eval echo lala
Run Code Online (Sandbox Code Playgroud)

和:

command="echo lala"
$command
Run Code Online (Sandbox Code Playgroud)

他们似乎都有相同的效果,但我可能会遗漏一些东西.而且,如果它们确实具有相同的效果,那么eval命令点是什么?

Joh*_*nck 5

试试这个:

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.

  • @TomFenech:那确实很尴尬.我已经取代了它. (2认同)