更新时间:2023-10-17 15:30:16
Unix Shell在执行每行输入之前对它们进行一系列转换。对于大多数shell,它看起来像这样(取自Bash man page):
使用$cmd
会在参数扩展阶段将其直接替换为您的命令,然后进行以下所有转换。
使用eval "$cmd"
在引号删除阶段之前不执行任何操作,在此阶段$cmd
按原样返回,并作为参数传递给eval
,其功能是在执行之前再次运行整个链。
$ cmd="echo foo{bar,baz}"
$ $cmd
foo{bar,baz}
$ eval "$cmd"
foobar foobaz