两者之间的真正区别是什么:
env VARIABLE=VALUE command
和
VARIABLE=VALUE command
在 bash 兼容的 shell 中?
注意:我自己做了一些测试,我看不出有什么区别
编辑:一个例子是
EDITOR=nano visudo
与
env EDITOR=nano visudo
答案1
外部命令的结果没有太大差异。运行env
只涉及额外的exec
变量赋值解析,否则 shell 会执行此操作。env -i
会更有用,因为它会清除环境,这在 shell 中并不是那么简单。
在这两种情况下,诸如命令替换之类的扩展VAR=$(somecmd)
都会在分配发生之前由 shell 运行,并且两种情况都遵循PATH
等等。我能想到的唯一区别是 的值_
,它Bash 设置为它运行的命令的名称(但env
没有)。当然,如果没有env
,您也可以运行 shell 的内置版本的命令。