使用 env 和在命令前面进行变量赋值有什么区别?

Jak*_*ger 2 bash

当我想更改在 bash 中执行的命令的环境时,我可以在它前面加上变量赋值。例如,如果我暂时想设置变量,CLICOLOR我可以这样做:

CLICOLOR=1 ls
Run Code Online (Sandbox Code Playgroud)

但我也可以这样做

env CLICOLOR=1 ls
Run Code Online (Sandbox Code Playgroud)

两者结果相同,所以我想知道有什么区别吗?为什么人们使用其中一种而不是另一种?是因为可移植性,还是使用输出重定向或管道等时有什么区别?

tri*_*eee 5

这主要是为了让您不必运行 shell 来设置变量。许多工具允许您运行单个命令来执行特定任务(cron 作业、构建系统、各种工具的内部脚本或宏语言),并且您希望最大限度地减少此类场景的性能影响和安全面。